Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 29-07-2016 16:57:11

Lolowe
Nouveau membre
Date d'inscription: 07-12-2015
Messages: 5

Route avec slug

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. smile


Ancienne route:

Code:

'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:

Code:

        '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

 

#2 02-08-2016 11:16:53

Lolowe
Nouveau membre
Date d'inscription: 07-12-2015
Messages: 5

Re: Route avec slug

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:

Code:

[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 :

Code:

[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

 

#3 04-08-2016 00:40:28

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Route avec slug

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

 

#4 04-08-2016 16:59:58

Lolowe
Nouveau membre
Date d'inscription: 07-12-2015
Messages: 5

Re: Route avec slug

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

 

#5 04-08-2016 23:07:12

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Route avec slug

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). smile

Code:

 [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)


22914720

Hors ligne

 

#6 05-08-2016 11:27:10

Lolowe
Nouveau membre
Date d'inscription: 07-12-2015
Messages: 5

Re: Route avec slug

Merci ça m'a aidé! smile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages