使用可选参数的Cakephp路由

时间:2010-01-27 07:43:23

标签: php cakephp routing

我的用户控制器中有一个方法类似于:

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

这两个参数都是可选的,可以一起使用或单独使用。

所以使用以下路线。

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

http://example.com/users/members成功变为http://example.com/members

不幸的是,以下内容不起作用

http://example.com/members/type:cat
http://example.com/members/category:dog
http://example.com/members/type:cat/category:dog

我怎样才能设置路线以使它们都能正常工作?

2 个答案:

答案 0 :(得分:2)

命名参数不会自动映射到操作。您可以通过致电

来获取它们
  

$ this-> passedArgs ['type']或$ this-> passedArgs ['category']

或使用Router :: connect中的第3个参数:

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

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

答案 1 :(得分:1)

尝试

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

请注意,我没有测试它,但我认为你必须逃脱冒号。