2010-12-01 28 views
8

tengo la siguiente ruta:Router_Route con parámetros opcionales

 $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)); 

Me gustaría ser capaz de añadir un parámetro de 'filtro' opcional a esta ruta. Así que podría utilizar la siguiente URL:

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

Cualquiera de los dos debería funcionar. Traté de colocar un parámetro opcional en la ruta, pero eso no funcionó. ¿Algunas ideas?

Respuesta

12

Normalmente, en Zend's Router, como en PHP, un parámetro opcional es un parámetro que tiene un valor predeterminado. Agregue uno para el parámetro 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

¿Por qué no, simplemente omítalo? –

+1

@Mark: Porque para usar parámetros con nombre (es decir: $ this -> _ getParam ('filter')), debe usar rutas. De lo contrario, debe pasarlo en GET o analizar la URL manualmente. – netcoder

+0

funciona como un encanto, ¡gracias! – sladda

Cuestiones relacionadas