Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je suis confronté à des problématiques particulières, associant Zend_Route et Zend_Navigation.
Point de départ
Imaginons l'implémentation suivante via Zend_Navigation :
array( 'label' => 'Profile', 'route' => 'user', 'controller' => 'profile', 'action' => 'index', ),
et via Zend_Route :
array( 'type' => 'Zend_Controller_Router_Route', 'route' => 'user/:iduser/:nameuser/*', 'defaults' => array( 'module' => 'default', 'controller' => 'profile', 'action' => 'index', ) )
Utilisation de la route via l'aide de vue URL
La première problématique, est qu'en permettant l'utilisation de paramètres dans la route (*), dès que je spécifie via l'aide de vue URL les paramètres 'controller' et 'action' ils sont ajoutés à l'URL en tant que paramètre.
$this->url(array('controller' => 'profile', 'action' => 'index', 'iduser' => 2, 'nameuser' => 'John Doe'), 'user', true); // renvoie : /user/2/John+Doe/controller/profile/action/index
En revanche si j'omets les 'controller' et 'action' dans l'appel de la méthode :
$this->url(array('iduser' => 2, 'nameuser' => 'John Doe'), 'user', true); // renvoie : /user/2/John+Doe/
Ce point là est déjà relativement contraignant je trouve, je n'ai pas trouvé de manière pour que 'controller' et 'action' ne soient pas considérés comme des paramètres supplémentaires.
La solution, si on ne veut pas voir apparaître ces deux paramètres supplémentaires, est donc de les supprimer dans les paramètres d'appel à la méthode (comme ils sont définis dans la route 'user' alors l'URL renvoyée sera la bonne).
Ce n'est pas trop problématique en soit si l'on n'a pas l'intention de modifier la route à l'avenir en y insérant l'action ou le controller (car cela nécessiterait de modifier tous les appels à l'aide de vue pour y ajouter l'action ou le controller le cas échéant ; c'est là que c'est problématique je trouve !).
Utilisation de la route via Zend Navigation
Là où le problème prend de l'ampleur, c'est que si l'on désire générer les URLs d'une application en fonction de Zend_Navigation, en utilisant la méthode 'getHref()' de Zend_Navigation_Page_Mvc, le problème de l'aide de vue URL revient au galop (puisque Zend_Navigation_Page_Mvc utilise cette aide de vue pour générer les aides de vues).
La solution précédente n'est pas applicable, car si l'on retire les paramètres 'controller' et 'action' de Zend_Navigation (cf. "Point de départ"), l'URL retournée sera bonne (puisqu'elle utilise la route 'user' qui elle connait le controller et l'action qu'elle doit utiliser), mais en revanche Zend_Navigation n'aura plus ces informations et la reconnaissance de la page courante comme active ne sera plus possible (Zend_Navigation ne sait pas interpréter un object Zend_*_Route et base sa reconnaissance d'URL sur les propres paramètres qui lui sont spécifié à lui)
Bref, je n'ai pas trouvé de solution pour conserver une URL acceptant des paramètres (*) sans que 'controller' et 'action' ne viennent s'ajouter à l'URL générée lors de l'utilisation de Zend_Navigation_Page_Mvc::getHref() ou de l'aide de vue URL si on lui spécifie ces deux informations.
Si quelqu'un a une idée...
Merci
Hors ligne
Je trouve que tu as très bien expliqué le problème.
En effet, cela fait un moment que j'ai le même problème que toi mais je me sauve de la situation en créant plusieurs routes pour une même page (1 route avec des paramètres et 1 route sans params, etc...)
C'est clair que ce n'est pas la bonne solution et je recommande vraiment pas.
Je viens donc relancer la question et le problème que tu as si bien décrit.
Hors ligne
Pages: 1