2010-01-27 75 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')); 

請注意,我沒有測試它,但我認爲你必須逃離結腸。