Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'utilisais les routes de façon basique jusqu'à maintenant (voir ci-dessous).
J'ai maintenant besoin de remplacer le controller et l'action de ma route par un slug.
Je veux donc passer de :
www.****.com/provider/list 
à 
www.****.com/liste-des-providers.
Je peux ôter le nom du controller de la route, cependant pas l'action.
Je pourrais utiliser des child route en définissant une route par défaut pour chaque action, mais j'aimerais que mon code soit réutilisable et donc, j'aimerais garder le système d'action générique, sans avoir à rajouter un child route à chaque nouvelle action.
Si vous avez une idée, vous remercies d'avance pour votre aide. ![]()
Ancienne route:
'router' => array(
                'routes' => array(
                        'provider' => array(
                                'type'    => 'segment',
                                'options' => array(
                                        'route'    => '/provider[/:action][/:page]',
                                        'constraints' => array(
                                                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                                'page'     => '[0-9]+',
                                                
                                        ),
                                        'defaults' => array(
                                                'controller' => 'Provider\Controller\Provider',
                                                'action'     => 'index',
                                                'page' => 1,
                                        ),
                                ),
                        ),
                ),
        ),Nouvelle route:
        'router' => array(
                'routes' => array(
                        'provider' => array(
                                'type'    => 'segment',
                                'options' => array(
                                        'route'    => '[/:slug][/:page]',
                                        'constraints' => array(
                                                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                                'slug' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                                'page'     => '[0-9]+',
                                                
                                        ),
                                        'defaults' => array(
                                                'controller' => 'Provider\Controller\Provider',
                                                'action' => 'list',
                                                'slug'     => 'list',
                                                'page' => 1,
                                                
                                        ),
                                ),Hors ligne
Bonjour,
Autre chose, je pensais pouvoir gérer ce problème (en prenant plus de temps) et en créant des child routes. Seulement cela ne fonctionne pas non plus. J'ai pas mal cherché mais je ne trouve pas de solution.
Avec l'url monsite/liste-des-sites-a-visiter (slug qui correspond à mon action provider/list) ou avec monsite//points-de-vente (slug qui correspond à mon action provider/listpdv) j'atteris à chaque fois sur la vue list, même avec le slug points-de-vente (je devrais atterir sur la vue listpdv avec celui-ci).
Peu importe le slug que je saisies en url j'atteris sur ma vue list, qui correspond à mon action listAction.
J'aimerai que chaque slug me renvoie bien vers la bonne vue.
Si quelqu'un a déjà rencontré ce problème je suis preneur d'une solution!
module.config.php: 
[lang=php]        'router' => array(
                'routes' => array(
                        'provider' => array(
                                'type'    => 'segment',
                                'options' => array(
                                        'route'    => '[/:slug][/:page]',
                                        'constraints' => array(
                                                'slug' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                                'page'     => '[0-9]+',                                                
                                        ),
                                        'defaults' => array(
                                                'controller' => 'Provider\Controller\Provider',
                                                'action' => 'list',
                                                'page' => 1,                                                
                                        ),
                                ),
                                'may_terminate' => true,
                                'child_routes' => array(
                                        'listpdv' => array(
                                                'type' => 'segment',
                                                'options' => array(
                                                        'route' => '[/:slug][/:page]',
                                                        'constraints' => array(
                                                        
                                                                'slug' => '[a-zA-Z0-9_-]+',
                                                                'page' => '[0-9]+',
                                                        ),
                                                        'defaults' => array(
                                                                'action' => 'listpdv',
                                                                'page' => 1,
                                                        ),
                                                ),
                                        ),
                                        'detail' => array(
                                                'type' => 'segment',
                                                'options' => array(
                                                        'route' => '[/:slug][/:page]',
                                                        'constraints' => array(
                                                                'slug' => '[a-zA-Z0-9_-]+',
                                                                'page' => '[0-9]+',
                                                        ),
                                                        'defaults' => array(
                                                                'action' => 'detail',
                                                                
                                                                'page' => 1,
                                                        ),
                                                ),
                                        ),
                                ),
                        ),
                ),
        ),Voilà mon fichier de navigation : 
[lang=php]<?php
return [ 
        'navigation' => [ 
                'default' => [ 
                        [ 
                                'idmenu' => '9',
                                'label' => 'Comment ça marche ?',
                                'title' => 'Comment ça marche ?',
                                'slug' => 'commentcamarche',
                                'menu' => true,
                                'active' => true,
                                'route' => 'home',
                                'controller' => 'index',
                                'action' => 'index',
                                'resource' => 'menu_issuer',
                                'pages' => [ 
                                        [ 
                                                'idmenu' => '6',
                                                'label' => 'Fonctionnement du Pass\'a',
                                                'title' => 'Fonctionnement du Pass\'a',
                                                'slug' => 'fonctionnement',
                                                'menu' => true,
                                                'route' => 'page',
                                                'controller' => 'page',
                                                'action' => 'fonctionnement',
                                                'params' => [ 
                                                        '' => '' 
                                                ],
                                                'active' => true,
                                                'parent_id' => '9' 
                                        ],
                                        [ 
                                                'idmenu' => '7',
                                                'label' => 'Economies réalisées',
                                                'title' => 'Economies réalisées',
                                                'slug' => 'economies-realisees',
                                                'menu' => true,
                                                'route' => 'simulator',
                                                'controller' => 'simulator',
                                                'action' => 'index',
                                                'active' => true,
                                                'position' => '1',
                                                'parent_id' => '9' 
                                        ],
                                        [ 
                                                'idmenu' => '8',
                                                'label' => 'Carte cadeau',
                                                'title' => 'Carte cadeau',
                                                'slug' => 'cartecadeau',
                                                'menu' => true,
                                                'route' => 'page',
                                                'controller' => 'page',
                                                'action' => 'cartecadeau',
                                                'active' => true,
                                                'position' => '2',
                                                'parent_id' => '9' 
                                        ] 
                                ] 
                        ],
                        [ 
                                'idmenu' => '10',
                                'label' => 'Sites inclus dans le Pass',
                                'title' => 'sitesinclus',
                                'slug' => 'sitesinclus',
                                'menu' => true,
                                'active' => true,
                                'position' => '1',
                                'route' => 'home',
                                'controller' => 'index',
                                'action' => 'index',
                                'pages' => [ 
                                        [ 
                                                'idmenu' => '11',
                                                'label' => 'Liste des sites à visiter',
                                                'title' => 'liste-des-sites-a-visiter',
                                                'slug' => 'liste-des-sites-a-visiter',
                                                'menu' => true,
                                                'route' => 'provider',
                                                'controller' => 'provider',
                                                'action' => 'list',
                                                'active' => true,
                                                'parent_id' => '10',
                                                'params'=>[
                                                        'slug' => 'liste-des-sites-a-visiter',
                                                ]
                                        ],
                                        [ 
                                                'idmenu' => '12',
                                                'label' => 'Carte des sites à visiter',
                                                'title' => 'carte des sites a visiter',
                                                'slug' => 'carte-des-sites-a-visiter',
                                                'menu' => true,
                                                'route' => 'googlemap',
                                                'controller' => 'googlemap',
                                                'action' => 'providermap',
                                                'active' => true,
                                                'position' => '1',
                                                'parent_id' => '10' 
                                        ],
                                        [ 
                                                'idmenu' => '13',
                                                'label' => 'Phothotèque des sites à visiter',
                                                'title' => 'Phothotèque des sites à visiter',
                                                'slug' => 'phothoteque-des-sites-a-visiter',
                                                'menu' => true,
                                                'route' => 'phototheque',
                                                'controller' => 'phototheque',
                                                'action' => 'index',
                                                'active' => true,
                                                'position' => '2',
                                                'parent_id' => '10' 
                                        ],
                                        [ 
                                                'idmenu' => '14',
                                                'label' => 'videothèque des sites à visiter',
                                                'title' => 'videothèque des sites à visiter',
                                                'slug' => 'videotheque-des-sites-a-visiter',
                                                'menu' => true,
                                                'route' => 'page',
                                                'controller' => 'page',
                                                'action' => 'videotheque',
                                                'active' => true,
                                                'position' => '3',
                                                'parent_id' => '10' 
                                        ] 
                                ] 
                        ],
                        [ 
                                'idmenu' => '15',
                                'label' => 'Où se le procurer ?',
                                'title' => 'Où se le procurer ?',
                                'slug' => 'ou-se-le-procurer',
                                'menu' => true,
                                'active' => true,
                                'position' => '2',
                                'route' => 'home',
                                'controller' => 'index',
                                'action' => 'index',
                                'pages' => [ 
                                        [ 
                                                'idmenu' => '16',
                                                'label' => 'Points de vente',
                                                'title' => 'Points de vente',
                                                'slug' => 'points-de-vente',
                                                'menu' => true,
                                                'route' => 'provider',
                                                'controller' => 'provider',
                                                'action' => 'listpdv',
                                                'active' => true,
                                                'parent_id' => '15',
                                                'params'=>[
                                                        'slug' => 'points-de-vente',
                                                ]
                                        ],
                                        [ 
                                                'idmenu' => '17',
                                                'label' => 'Carte des points de vente',
                                                'title' => 'Carte des points de vente',
                                                'slug' => 'carte-des-points-de-vente',
                                                'menu' => true,
                                                'route' => 'googlemap',
                                                'controller' => 'googlemap',
                                                'action' => 'pdvmap',
                                                'active' => true,
                                                'position' => '1',
                                                'parent_id' => '15' 
                                        ],
                                        [ 
                                                'idmenu' => '18',
                                                'label' => 'Boutique en ligne',
                                                'title' => 'Boutique en ligne',
                                                'slug' => 'boutique-en-ligne',
                                                'menu' => true,
                                                'route' => 'page',
                                                'controller' => 'page',
                                                'action' => 'shop',
                                                'active' => true,
                                                'position' => '2',
                                                'parent_id' => '15' 
                                        ] 
                                ] 
                        ],
                        [ 
                                'idmenu' => '19',
                                'label' => 'Boutique Pass\'a',
                                'title' => 'Boutique Pass\'a',
                                'slug' => 'boutique-pass-a',
                                'menu' => true,
                                'route' => 'page',
                                'controller' => 'page',
                                'action' => 'shop',
                                'active' => true,
                                'position' => '3' 
                        ],
                        [ 
                                'idmenu' => '20',
                                'label' => 'Autour du Pass\'a',
                                'title' => 'Autour du Pass\'a',
                                'slug' => 'autour-du-pass-a',
                                'menu' => true,
                                'active' => true,
                                'position' => '4',
                                'route' => 'home',
                                'controller' => 'index',
                                'action' => 'index',
                                'pages' => [ 
                                        [ 
                                                'idmenu' => '21',
                                                'label' => 'Presse',
                                                'title' => 'Presse',
                                                'slug' => 'presse',
                                                'menu' => true,
                                                'route' => 'page',
                                                'controller' => 'page',
                                                'action' => 'presse',
                                                'active' => true,
                                                'parent_id' => '20' 
                                        ],
                                        [ 
                                                'idmenu' => '22',
                                                'label' => 'Web',
                                                'title' => 'Web',
                                                'slug' => 'web',
                                                'menu' => true,
                                                'route' => 'page',
                                                'controller' => 'page',
                                                'action' => 'web',
                                                'active' => true,
                                                'position' => '1',
                                                'parent_id' => '20' 
                                        ],
                                        [ 
                                                'idmenu' => '23',
                                                'label' => 'Vidéos',
                                                'title' => 'Vidéos',
                                                'slug' => 'videos',
                                                'menu' => true,
                                                'route' => 'page',
                                                'controller' => 'page',
                                                'action' => 'video',
                                                'active' => true,
                                                'position' => '2',
                                                'parent_id' => '20' 
                                        ],
                                        [ 
                                                'idmenu' => '24',
                                                'label' => 'Amis du Pass',
                                                'title' => 'Amis du Pass',
                                                'slug' => 'amis-du-pass',
                                                'menu' => true,
                                                'route' => 'page',
                                                'controller' => 'page',
                                                'action' => 'friends',
                                                'active' => true,
                                                'position' => '3',
                                                'parent_id' => '20' 
                                        ],
                                        [ 
                                                'idmenu' => '26',
                                                'label' => 'Abonnement à la newsletter',
                                                'title' => 'Abonnement à la newsletter',
                                                'slug' => 'abonnement-a-la-newsletter',
                                                'menu' => true,
                                                'route' => 'newsletter',
                                                'controller' => 'newsletter',
                                                'action' => 'index',
                                                'active' => true,
                                                'position' => '4',
                                                'parent_id' => '20' 
                                        ] 
                                ] 
                        ],
                        [ 
                                'idmenu' => '25',
                                'label' => 'Application Mobile',
                                'title' => 'Application Mobile',
                                'slug' => 'application-mobile',
                                'menu' => true,
                                'route' => 'page',
                                'controller' => 'page',
                                'action' => 'mobile',
                                'active' => true,
                                'position' => '5' 
                        ] 
                ] 
        ],
        
        'service_manager' => array(
                'factories' => array(
                        //       'Zend\Db\Adapter\Adapter'
                        //     => 'Zend\Db\Adapter\AdapterServiceFactory',
                        'navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory',
                ),
        ),
         
];Dernière modification par Lolowe (02-08-2016 11:17:29)
Hors ligne
Hello, franchement je n'ai rien compris ... Pourrais-tu donner un exemple claire de route que tu veux avoir via les 2 méthodes parce que là dans ce que tu expliques dans les 2 cas ta route est la même (seul le slug change mais le pattern est le même) donc normal de tomber toujours sur la même action
Hors ligne
Désolé pour le manque de clarté et merci pour la réponse.
Je voudrais simplement créer des routes avec des slugs, sans que le controller et l'action soient visibles dans l'url.
J'ai évidemment plusieurs actions et plusieurs controllers.
Hors ligne
monsite.com/liste-des-sites-a-visiter
et
monsite.com/points-de-vente 
sont au même niveaux. Il ne faut donc pas les imbriquer (parent/child) dans la route. C'est pour cela que tu tombes à chaque fois sur le premier.
Tes slugs, tu les inscrits dans les 'route' et c'est dans les sections 'defaults' que tu assignes le controller et l'action.
C'est tout.
Et vire tous ces "array()" et remplace-les par des "[]" (si tu es en PHP 5.4+ ce que j'espère). ![]()
 [lang=php]
'router' => array(
        'routes' => array(
                'provider' => array(
                        'type'    => 'segment',
                        'options' => array(
                                'route'    => '/liste-des-providers[/:page]',
                                'constraints' => array(
                                        'page'     => '[0-9]+',                                                
                                ),
                                'defaults' => array(
                                        'controller' => 'Provider\Controller\Provider',
                                        'action' => 'list',
                                        'page' => 1,                                                
                                ),
                        ),
                  ),
                  'listpdv' => array(
                           'type' => 'segment',
                           'options' => array(
                                   'route' => '/liste-des-points-de-vente[/:page]',
                                   'constraints' => array(
                                       'page' => '[0-9]+',
                                   ),
                                   'defaults' => array(
                                       'controller' => 'Provider\Controller\Provider',
                                       'action' => 'listpdv',
                                       'page' => 1,
                                   ),
                           )
                    ),
                    'detail' => array(
                                        'type' => 'segment',
                                        'options' => array(
                                                'route' => 'detail-du-point-de-vente[/:id]',
                                                'constraints' => array(
                                                        'id' => '[0-9]+',
                                                ),
                                                'defaults' => array(
                                                         'controller' => 'Provider\Controller\Provider',
                                                         'action' => 'detail'
                                                ),
                                        ),
                    ),
)
)Dernière modification par Bouks (04-08-2016 23:10:09)
Hors ligne
Merci ça m'a aidé! ![]()
Hors ligne