routage Cakephp avec paramètres optionnels
Question
J'ai une méthode dans mon contrôleur d'utilisateurs similaires à:
function members($type = null, $category = null) { ... }
Les deux params sont optionnels et peuvent être utilisés ensemble ou sur leur propre.
Donc, avec l'itinéraire suivant.
Router::connect('/members/*', array('controller' => 'users', 'action' => 'members'));
http://example.com/users/members
devient avec succès http://example.com/members
.
Malheureusement, les éléments suivants ne fonctionnent pas
http://example.com/members/type:cat
http://example.com/members/category:dog
http://example.com/members/type:cat/category:dog
comment pourrais-je mettre en place mes itinéraires afin qu'ils fonctionnent toutes correctement?
La solution
Les paramètres nommés ne sont pas automagiquement mis en correspondance avec l'action. Vous pouvez les obtenir en appelant
$ this-> passedArgs [ 'type'] ou $ this-> passedArgs [ 'catégorie']
ou en utilisant le 3ème paramètre du routeur :: connect:
Router::connect(
'/members/*',
array('controller' => 'users', 'action' => 'members'),
array(
'pass' => array('type', 'category')
)
);
Autres conseils
Essayez avec
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'));
Notez que je ne l'ai pas testé, mais je pense que vous devez échapper au côlon.