La Ferme du web - Les forums

Venez baraguiner avec la communauté !

Vous n'êtes pas identifié.

#1 19/05/2011 12:52:55

apprenti
Membre
Date d'inscription: 19/05/2011
Messages: 12

Symfony probleme URL

Bonjour à tous,

J'ai découvert la ferme du web il y a peu et dans ce forum il y a des sujets traitant du framework Symfony. J'espère être au bon endroit sinon excusez-moi d'avance.

Je débute avec Symfony, j'ai fait le tuto Jobeet consulté plusieurs documents mais j'ai pas réussi à résoudre un problème.

Voila mon soucis les URL avec Symfony ou il faut afficher des photos.
Je travail avec un serveur Apache en local ou j'ai indiqué dans les virtual host   suivant

Code:

<VirtualHost *:80>
    ServerName zzzz
    DocumentRoot "/home/aaaaa/dev/server/comp/php/web"
    DirectoryIndex index.php


    <Directory "/home/aaaaa/dev/server/comp/php/web">
        AllowOverride All
        Allow from All
    </Directory>

    Alias /sf /home/aaaaa/dev/server/comp/php/lib/vendor/symfony/data/web/sf
    <Directory "/home/aaaaa/dev/server/comp/php/lib/vendor/symfony/data/web/sf">
        AllowOverride All
        Allow from All
    </Directory>

     Alias /trombi "/home/aaaaa/dev/server/comp/php/apps/frontend/modules/trombi"
    <Directory "/home/aaaaa/dev/server/comp/php/apps/frontend/modules/trombi">
        AllowOverride All
        Allow from All
    </Directory>

     Alias /vignette "/home/aaaaa/dev/server/local/photo/vignette"
    <Directory "/home/kg710064/dev/tbs-server/local/photo/vignette">
        AllowOverride All
        Allow from All
    </Directory>

    Alias /identite "/home/aaaaa/dev/server/local/photo/identite"
    <Directory "/home/aaaaa/dev/server/local/photo/identite">
        AllowOverride All
        Allow from All
    </Directory>

Dans le fichier routing.yml de symfony j'y indique :

Code:

photo_format:
  url:   /zzzz/trombi/photo/:format/:id.jpg 
  param: { module: trombi , action: show }

trombi est le nom du module de l'appli. Le format peut etre soit vignette soit identite ( ce sont les alias dans le apache local) est le id est dans une base de donnée. L'application est relié à cette base de donnée.

Ce que je voudrais c'est que dans mon navigateur quand je tape  /zzzz/trombi/photo/:format/:matricule.jpg  ça me fasse ce qui est indiqué dans executeShow qui est situé dans action.class.php. J'ai laissé le code par défaut qui est

Code:

$this->agent = Doctrine_Core::getTable('Agent')->find(array($request->getParameter('id')));
    $this->forward404Unless($this->agent);

Je pensais qu'en tapant l'url cité plus haut ca m'affiche les infos d'une personne .Au lieu de ça j'ai la photo qui apparait. C'est ce qui me fait dire que je me suis trompé quelque part

Pouvez-vous m'aider ?

Désolé de la plongeur du post et j'espère avoir été clair.

Hors ligne

 

19/05/2011 12:52:55

Botte De Foin Publicitaire


#2 19/05/2011 16:09:21

Sybio
Administrateur
Date d'inscription: 06/10/2008
Messages: 89
Site web

Re: Symfony probleme URL

J'ai vraiment pas compris ton histoire de vhosts, dans symfony tout passe par index.php (qui est un controller, aussi frontend_dev.php, etc...) et le framework ne fonctionnera pas sans passer par ce dernier.

Là tu fais un alias inutile:

Code:

Alias /trombi "/home/aaaaa/dev/server/comp/php/apps/frontend/modules/trombi"
    <Directory "/home/aaaaa/dev/server/comp/php/apps/frontend/modules/trombi">
         AllowOverride All
         Allow from All
      </Directory>

Cet alias ne fonctionnera jamais ! Tu ne passes pas par le controller (index.php dans web/), là où tout le moteur est exécuté.

Commence par enlever cet alias de la conf d'apache.

Dans Symfony, pour avoir des URLs personnalisées tu as juste à configurer les routes comme tu le souhaites:

photo_format:
     url:   /trombi/photo/:format/:id.jpg
   param: { module: trombi , action: show }

Inutile donc d'avoir un alias /trombi, tu le fais via l'url de la route dans routing.yml, ce qui est beaucoup plus ismple et fait pour ça wink !

Hors ligne

 

#3 20/05/2011 09:29:18

apprenti
Membre
Date d'inscription: 19/05/2011
Messages: 12

Re: Symfony probleme URL

Bonjour Sybio,

Tout d'abord merci de ta réponse. Je suis loin d'avoir compris le fonctionnement de symfony.
J'ai fait comme tu as dit j'ai enlevé l'alias du virtual host dans Apache

Dans le routing.yml j'ai indiqué

Code:

photo_format:
  url:   /trombi/:format/:id.jpg 
  param: { module: trombi , action: show }
  requirements: { format: '(vignette) | (identite)' }

J'ai mis le requirement car le format peut être de deux types possibles

Ce qui fait que quand je tape http://DNS/frontend_dev.php/trombi/photo/vignette/8755.jpg j'obtiens comme erreur

Code:

Action "trombi/photo" does not exist.

Alors que trombi c'est le nom du module et photo le nom du dossier qui contient les dossiers vignette et identite qui contiennent les photos. De plus vu que dans le routing.yml j'ai indiqué l'action show je pensais que symfony comprenait que pour cette url le module trombi est demandé ainsi que l'action show de ce module. Je me suis encore trompé ?

Corrige-moi si je me trompe mais c'est dans frontend_dev.php que je dois indiquer que photo correspond à un dossier ?

Désolé de toutes ces questions mais j'ai du mal à comprendre malgré la lecture de tutoriel comme Jobeet.

EDIT
En créant une action nommée executeVignette et executeIdentite dans actions.class.php et un template associé à chaqu'une des deux actions.


Dans le routing j'ai voulu faire

Code:

photo_format:
  url:   /photo/:format/:id.jpg  // j'ai changé le nom du module de trombi en photo
  param: { module: photo , action: '(vignette) | (identite)' }
  requirements: { format: '(vignette) | (identite)' }

mais j'ai une erreur Action "photo/vignetteidentite" does not exist.

Cela veut dire que pour chaque format de photo dont je dispose je vais devoir creer une  route spécifique ? 


Code:

photo_vignette:
  url:   /photo/vignette/:id.jpg  // j'ai changé le nom du module de trombi en photo
  param: { module: photo , action: vignette }

puis

Code:

photo_identite:
  url:   /photo/vignette/:id.jpg  
  param: { module: photo , action: identite }

Si j'ai que 2 formats c'est pas la mort mais si ça augmente ca va faire beaucoup non ? De plus il faudra donc que je creer les actions et les templates qui y sont attachés. Pour un projet symfony avoir beaucoup de template et d'action dans action.class.php est-il gênant ou non ?

Dernière modification par apprenti (20/05/2011 11:19:30)

Hors ligne

 

#4 20/05/2011 16:23:13

apprenti
Membre
Date d'inscription: 19/05/2011
Messages: 12

Re: Symfony probleme URL

(Re)bonjour,

Désolé de vous embêtez mais j'ai une seconde question sur le même sujet.
J'ai l'adresse URL suivante http://local-tbs/frontend_dev.php/photo/vignette/207300.jpg ou 207300 correspond à un id en base de donnée

Le code me semble bon mais j'ai l'erreur This request has been forwarded to a 404 error page by the action "photo/vignette".
Ce qui veut dire que l'id n'a pas été trouvé dans la base de donnée. Pourtant l'id existe bien.

Le routing de ma route est la suivante :

Code:

photo_vignette:
  url:   /photo/vignette/:id.jpg
  param: { module: photo , action: vignette }
  requirements:
  sf_method: [get]

Mon code de l'action vignette est la suivante

Code:

 public function executeVignette(sfWebRequest $request)
  {
    $this->employes = Doctrine_Core::getTable('Employe')->find(array($request->getParameter('id')));
    $this->forward404Unless($this->employe);
  }

// Dans ce code je veux que symfony récupère un employé selon son id qui à été transmit en paramètre.

Le code du template de vignette  est le suivant

Code:

<h1>Agents List</h1>

<table>
  <thead>
    <tr>
      <th>Id</th>
      <th>Civilite</th>
      <th>Mail</th>
      <th>Created at</th>
      <th>Updated at</th>
      <th>Deleted at</th>
    </tr>
  </thead>
  <tbody>
    <?php foreach ($employes as $employe): ?>
    <tr>
      <td><a href="<?php echo url_for('photo/show?id='.$employe->getId()) ?>"><?php echo $employe->getId() ?></a></td>
      <td><?php echo $employe->getCivilite() ?></td>
      <td><?php echo $employe->getMail() ?></td>
      <td><?php echo $employe->getCreatedAt() ?></td>
      <td><?php echo $employe->getUpdatedAt() ?></td>
      <td><?php echo $employe->getDeletedAt() ?></td>
    </tr>
    <?php endforeach; ?>
  </tbody>
</table>

// Affichage des informations relative à cet employe.

Je ne vois pas l'erreur.
D'avance je vous remercie de vos suggestions.

Hors ligne

 

#5 20/05/2011 16:26:39

DJo
Administrateur
Date d'inscription: 31/07/2008
Messages: 558
Site web

Re: Symfony probleme URL

Ne serait-ce pas $this->forward404Unless($this->employe); qui est executé car l'ID n'existe pas ?

Hors ligne

 

#6 20/05/2011 16:37:12

apprenti
Membre
Date d'inscription: 19/05/2011
Messages: 12

Re: Symfony probleme URL

DJo a écrit:

Ne serait-ce pas $this->forward404Unless($this->employe); qui est executé car l'ID n'existe pas ?

Oui en effet mais justement le problème est que l'id existe  dans la base de donnée. C'est aussi ce que me dit la barre de debogage de symfony

Code:

Match route "photo_vignette" (/photo/vignette/:id.jpg) for /photo/vignette/207300.jpg with parameters array ( 'module' => 'photo', 'action' => 'vignette', 'id' => '207300',)
2    Info sfFilterChain    Executing filter "sfRenderingFilter"
3    Info sfFilterChain    Executing filter "sfExecutionFilter"
4    Info photoActions    Call "photoActions->executeVignette()"
5    Info Doctrine_Connection_Pgsql    exec : SET NAMES 'UTF8' - ()
6    Info Doctrine_Connection_Statement    execute : SELECT a.id AS a__id, a.civilite AS a__civilite, a.mail AS a__mail, a.created_at AS a__created_at, a.updated_at AS a__updated_at, a.deleted_at AS a__deleted_at FROM employe a WHERE (a.id = ?) LIMIT 1 - (207300)
7    Error sfError404Exception    This request has been forwarded to a 404 error page by the action "photo/vignette".

Pourtant j'ai la table de la base de donnée sous les yeux et je peux certifier que 207300 est bien présent dans la colonne id de la table agent. C'est pour ça que je ne comprends pas.

Hors ligne

 

#7 08/07/2011 16:12:06

Sybio
Administrateur
Date d'inscription: 06/10/2008
Messages: 89
Site web

Re: Symfony probleme URL

Quand tu récupères l'employé, tu as un s pour $this->employes, alors que dans le forward tu l'as oublié: $this->employe ! $this->employe n'existe pas, le forward 404 est donc exécuté !

Si j'ai que 2 formats c'est pas la mort mais si ça augmente ca va faire beaucoup non ? De plus il faudra donc que je creer les actions et les templates qui y sont attachés. Pour un projet symfony avoir beaucoup de template et d'action dans action.class.php est-il gênant ou non ?

Quand à ton URL, pour le paramètre format, c'est vrai que mettre plus de 3-4 formats risque de devenir lourd à lire ! (requirements: { format: '(vignette) | (identite)' }). Je te conseil donc de tester soit directement dans l'action si le format récupéré correspond à l'un de ta liste, via une méthode par exemple, sinon tu lances un forward404 ! Plus compliqué, tu peux également créer une route personnalisée http://www.symfony-project.org/more-wit … ed-Routing

Hors ligne

 

#8 12/07/2011 08:44:39

apprenti
Membre
Date d'inscription: 19/05/2011
Messages: 12

Re: Symfony probleme URL

Bonjour Sybio,

Merci de ta réponse.
Je n'avais pas posté la résolution de ce post mais c'est en corrigeant les éléments que tu as cité.

Désolé .

Hors ligne

 

Pied de page des forums

Powered by FluxBB
© Copyright 2008-2009 - LaFermeduWeb.net