2010-01-27 3 views
1

J'ai une méthode dans mes utilisateurs contrôleur similaire à:routage CakePHP avec option params

function members($type = null, $category = null) { ... } 

Les deux params sont optionnels et peuvent être utilisés ensemble ou sur leur propre.

Donc avec la route suivante.

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?

Répondre

2

Les paramètres nommés ne sont pas mappés automagicalement à 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: : connecter:

Router::connect(
    '/members/*', 
    array('controller' => 'users', 'action' => 'members'), 
    array(
     'pass' => array('type', 'category') 
    ) 
); 

http://book.cakephp.org/view/46/Routes-Configuration

+0

Bizarrement cela fonctionne en tapant l'URL directement bien que le routage inverse ne fonctionne pas. $ html-> link ('mon lien', array ('controller' => utilisateurs, 'action' => 'membres', 'type' => 'bonjour', 'catégorie' => 'monde')); résultats dans l'URL de style régulière. Y a-t-il autre chose à faire avant que le routage inverse fonctionne? – DanCake

+0

existe-t-il d'autres itinéraires? Si tel est le cas, il est possible qu'un autre appel de connexion prenne en charge le routage inverse. – harpax

+0

Router :: connectNamed (array ('type', 'category')); semble fonctionner. – DanCake

1

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.