2010-01-27 50 views
1

我在我的用户的方法控制器类似于:CakePHP的路由具有可选的PARAMS

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

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

$这个 - > passedArgs让他们[ '型']或$这个 - > passedArgs [ '类']

或通过使用路由器的第3个参数: :连接:

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

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

+0

奇怪的是直接在URL中打字的时候虽然反向路由不这样做的工作。 $ html-> link('my link',array('controller'=> users,'action'=>'members','type'=>'hello','category'=>'world'));导致常规样式的网址。在逆向路由工作之前还有其他事情需要做吗? – DanCake 2010-01-27 17:49:12

+0

还有其他路线吗?如果是这样,有可能另一个连接呼叫照顾相反的路由.. – harpax 2010-01-27 20:09:02

+0

Router :: connectNamed(array('type','category'));似乎工作。 – DanCake 2010-01-27 21:10:54

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

请注意,我没有测试它,但我认为你必须逃离结肠。