2010-12-01 10 views
8

je l'itinéraire suivant:Router_Route avec des paramètres facultatifs

 $gridRoute = new Zend_Controller_Router_Route(
     ':module/:controller/list/:order/:dir/:page', 
     array (
      'module' => 'default', 
      'controller' => 'index', 
      'order' => '', 
      'dir' => 'asc', 
      'page' => 1, 
      'action' => 'list' 
     ), 
     array (
      'page' => '\d+' 
     ) 
    ); 
    $router->addRoute('grid', $mainRoute->chain($gridRoute)); 

Je voudrais être en mesure d'ajouter un paramètre optionnel « filtre » à cette route. Donc, je pourrais utiliser l'adresse suivante:

http://example.org/default/list/filter/all/lname/asc/1 ou http://example.org/default/list/lname/asc/ ou http://example.org/default/list/filter/all

Soit on doit travailler. J'ai essayé de placer un paramètre facultatif dans la route mais cela n'a pas fonctionné. Des idées?

Répondre

12

Typiquement, dans le routeur de Zend, comme dans PHP, un paramètre optionnel est un paramètre qui a une valeur par défaut. Ajoutez-en un pour le paramètre filter:

$gridRoute = new Zend_Controller_Router_Route(
    ':module/:controller/list/:order/:dir/:page/:filter', 
    array (
     'module' => 'default', 
     'controller' => 'index', 
     'order' => '', 
     'dir' => 'asc', 
     'page' => 1, 
     'action' => 'list', 
     'filter' => null, // define default for filter here 
    ), 
    array (
     'page' => '\d+' 
    ) 
); 
+1

Pourquoi ne pas l'omettre? –

+1

@Mark: Parce que pour utiliser des paramètres nommés (par exemple: $ this -> _ getParam ('filter')), vous devez utiliser des routes. Sinon, vous devez le transmettre dans GET ou analyser l'URL manuellement. – netcoder

+0

fonctionne comme un charme, merci! – sladda