CakePHP enrutamiento con params opcionales
Pregunta
Tengo un método en el que mis usuarios controlador similar a:
function members($type = null, $category = null) { ... }
Los dos parametros son opcionales y se pueden utilizar juntos o por su cuenta.
Así, con el siguiente recorrido.
Router::connect('/members/*', array('controller' => 'users', 'action' => 'members'));
http://example.com/users/members
se convierte en éxito http://example.com/members
.
Por desgracia los siguientes no hacer el trabajo
http://example.com/members/type:cat
http://example.com/members/category:dog
http://example.com/members/type:cat/category:dog
¿cómo podría configurar mis rutas para que todo el trabajo correctamente?
Solución
Los parámetros con nombre no se asignan automagicaly a la acción. O se puede obtener llamando
$ this-> passedArgs [ 'type'] o $ this-> passedArgs [ 'categoría']
o mediante el uso de la tercera parámetro en el Router :: connect:
Router::connect(
'/members/*',
array('controller' => 'users', 'action' => 'members'),
array(
'pass' => array('type', 'category')
)
);
Otros consejos
Trate con
Router::connect('/members/type\:(.*)', array('controller' => 'users', 'action' => 'members_type'));
Router::connect('/members/category\:(.*)', array('controller' => 'users', 'action' => 'members_category'));
Router::connect('/members/type\:(.*)/category:(.*)', array('controller' => 'users', 'action' => 'members_type'));
Tenga en cuenta que no he probado, pero creo que hay que escapar del colon.