Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour, je souhaite obtenir des url plus propre j'ai donc logiquement décider d'utiliser la configs des routes avec ZF, malheureusement je n'obtient aucun résultat. Dans mon bootstrap j'initialise les routes comme cela :
protected function _initRoutes() { $configRoute = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini'); Zend_Controller_Front::getInstance()->getRouter()->addConfig($configRoute); }
Mon fichier ini :
[routes] photo.type = "Zend_Controller_Router_Route_Regex" photo.route = "view(?:-id-(\d+))?(?:-page-(\d+))?\.html" photo.reverse = "view-id-%d-page-%d.html" photo.defaults.controller = photo photo.defaults.action = view photo.defaults.id = 1 photo.defaults.page = 1 photo.map.1 = id photo.map.2 = page
J’accède à une photo de cette façon :
public/photo/view/id/2/page/1
Et avec la route config je devrais pouvoir écrire
public/view-id-2-page-1.html
Malheureusement j'obtient une erreur de controleur inexistant, ou est mon erreur?
Merci d'avance à vous!
Dernière modification par shadypierre (23-06-2010 10:17:08)
Hors ligne
Personne n'a une petite idée?
J'ai pourtant suivi la doc
Hors ligne
Salut,
Essaie comme ça :
[routes] photo.type = "Zend_Controller_Router_Route_Regex" photo.route = "view\-id\-(\d+)\-page\-(\d+)\.html" photo.reverse = "view-id-%d-page-%d.html" photo.defaults.controller = photo photo.defaults.action = view photo.defaults.id = 1 photo.defaults.page = 1 photo.map.1 = id photo.map.2 = page
A+ benjamin.
Hors ligne
Toujours pas je dois mal déclarer quelque chose. j'ai essayé avec des route plus simple
[routes]
photo.type = "Zend_Controller_Router_Route_Regex"
photo.route = "view.html"
photo.defaults.controller = photo
photo.defaults.action = view
Et ça ne marche meme pas
Hors ligne
C'est ton _initRoutes() qui doit pas être bon.
Pourquoi tu n'utilises pas la resource "router" dans application.ini plutôt que de charger manuellement un fichier ini ? A ce moment là tu n'as même plus besoin de ton _initRoutes().
resources.router.routes.photo.type = "Zend_Controller_Router_Route_Regex" resources.router.routes.photo.route = "view\-id\-(\d+)\-page\-(\d+)\.html" resources.router.routes.photo.map.1 = id resources.router.routes.photo.map.2 = page resources.router.routes.photo.defaults.module = default resources.router.routes.photo.defaults.controller = photo resources.router.routes.photo.defaults.action = view resources.router.routes.photo.defaults.id = 1 resources.router.routes.photo.defaults.page = 1 resources.router.routes.photo.reverse = "view-id-%d-page-%d.html"
A moins que tu n'utilises pas Zend_Application
A+ benjamin.
Hors ligne
Oui j'utilise Zend_Application et en effet c'est mon _initRoutes() qui va pas quand je met direct dans mon application.ini ça roule parfaitement, arf c'est dmg j'aimerais bien avoir mon fichier de route séparé
Hors ligne
Bonsoir,
Tu peux séparer les fichiers de config avec Zend_Application si tu es à jour en 1.10.x, je ne sais plus dans quelle version exactement ça a été intégré.
$application = new Zend_Application( APPLICATION_ENV, array( 'config' => array( APPLICATION_PATH . '/../etc/app/app.ini', APPLICATION_PATH . '/../etc/app/database.ini', APPLICATION_PATH . '/../etc/app/routes.ini' ) ) );
Attention par contre, erreur bête (que j'ai fais), toutes les sections doivent être présentes dans chaque fichier, même si elles sont vides, sinon le merge ne passe pas.
Par ex. routes.ini
[production] resources.router.routes.photo.type = "Zend_Controller_Router_Route_Regex" resources.router.routes.photo.route = "view\-id\-(\d+)\-page\-(\d+)\.html" resources.router.routes.photo.map.1 = id resources.router.routes.photo.map.2 = page resources.router.routes.photo.defaults.module = default resources.router.routes.photo.defaults.controller = photo resources.router.routes.photo.defaults.action = view resources.router.routes.photo.defaults.id = 1 resources.router.routes.photo.defaults.page = 1 resources.router.routes.photo.reverse = "view-id-%d-page-%d.html" [staging : production] [testing : production] [development : production]
A+ benjamin.
Hors ligne
Yes en effet ça roule
Merci bcp pour ton aide, vraiment!
Par contre c'est vraiment pas pratique de devoir refaire tout mes liens en modifiant la route à utiliser, j’entends par la qu'avant j'avais :
$this->url(array('controller'=>'photo', 'action'=>'view', 'id'=>$photo->getIdPhoto()),'default',true);
et maintenant j'ai :
$this->url(array('controller'=>'photo', 'action'=>'view', 'id'=>$photo->getIdPhoto()),'photo',true);
Il n'y a pas un moyen pour que Zend utilise automatiquement la bonne route en fonction de l'action et du controller demandé?
en tout cas merci vraiment bcp
Dernière modification par shadypierre (23-06-2010 01:10:55)
Hors ligne
Salut,
Non ce n'est pas possible. Par contre tu peux simplifier grâce aux valeurs par défaut de la route.
Le code suivant :
<a href="<?=$this->url(array( 'controller'=>'photo', 'action'=>'view', 'id'=>$photo->getIdPhoto() ),'photo',true)?>">lien</a>
Peut se simplifier en :
<a href="<?=$this->url(array('id'=>$photo->getIdPhoto()), 'photo')?>">lien</a>
A+ benjamin.
Dernière modification par Delprog (23-06-2010 09:30:03)
Hors ligne
Ah oui c'est tjr ça , merci bcp pour ton aide!
Hors ligne
beh, oui, quand on utilise une route, on n'a pas besoin de spécifié le module/controller/action (sauf quand on utilise la route 'default')
Hors ligne