2014-07-21 1 views
0

ma question concerne Zend Framework 2. J'ai deux voies qui se chevauchent un peu - on est sous la forme de:ZF2 - Deux itinéraires avec des motifs qui se chevauchent

/announcements/index[/:type][/:status] 

et l'autre:

/announcements[/:action][/:id] 

Ils sont définis dans la configuration dans le même ordre que ci-dessus. Le but est que presque toutes mes routes ont le même modèle, c'est action + ID, mais pour la page d'index, qui affiche une liste d'articles, je veux des possibilités de filtrage - je veux que l'utilisateur puisse filtrer les annonces par type et leur statut (accepté/rejeté/en attente de modération). Le problème est que, pour une raison ou une autre, le routeur sélectionne la deuxième route comme étant active lorsque je vais dans/announcements ou/announcements/index. Quelle est la meilleure idée pour résoudre cela?

Merci.

Répondre

3

Les routes pour enfants sont la voie à suivre, mais vous pouvez vous faciliter la vie en définissant les cas spéciaux avec leur propre itinéraire.

Dans mon exemple, la route enfant 'index' est définie avant la valeur 'par défaut', ce qui signifie que le routeur devrait d'abord correspondre à cette route.

'announcements' => array(
    'type' => 'Literal', 
    'options' => array(
     'route' => '/announcements', 
     'defaults' => array(
      'controller' => 'Application\Controller\Announcements', 
      'action' => 'index' 
     ) 
    ), 
    'may_terminate' => true, 
    'child_routes' => array(

     'index' => array(
      'type' => 'Segment', 
      'options' => array(
       'route' => '/index[/:type][/:status]', 
       'defaults' => array(
        'controller' => 'Application\Controller\Announcements', 
        'action' => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
     ), 

     'default' => array(
      'type' => 'segment', 
      'options' => array(
       'route' => '/:action/:id', 
       'defaults' => array(
        'controller' => 'Application\Controller\Announcements', 
       ), 
      ), 
      'may_terminate' => true, 
     ), 

    ), 
), 
+0

merci alex, je supprime ma réponse parce que ce serait la même chose que vous :) – ins0

Questions connexes