2011-07-21 115 views
0

有什麼辦法可以將以下規則合併爲一個規則?鞏固CakePHP路線

Router::connect('/manufacturer/:manufacturer/:friendly0', array('controller'=>'categories', 'action'=>'view'), array('pass'=>array('manufacturer', 'friendly0'))); 
Router::connect('/manufacturer/:manufacturer/:friendly0/:friendly1', array('controller'=>'categories', 'action'=>'view'), array('pass'=>array('manufacturer', 'friendly0', 'friendly1'))); 
Router::connect('/manufacturer/:manufacturer/:friendly0/:friendly1/:friendly2', array('controller'=>'categories', 'action'=>'view'), array('pass'=>array('manufacturer', 'friendly0', 'friendly1', 'friendly2'))); 
Router::connect('/manufacturer/:manufacturer/:friendly0/:friendly1/:friendly2/:friendly3', array('controller'=>'categories', 'action'=>'view'), array('pass'=>array('manufacturer', 'friendly0', 'friendly1', 'friendly2', 'friendly3'))); 
Router::connect('/manufacturer/:manufacturer/:friendly0/:friendly1/:friendly2/:friendly3/:friendly4', array('controller'=>'categories', 'action'=>'view'), array('pass'=>array('manufacturer', 'friendly0', 'friendly1', 'friendly2', 'friendly3', 'friendly4'))); 
+0

Router :: connect('/ manufacturer /:manufacturer /:friendly0/* – benhowdle89

+0

不幸的是,這將無法正常工作,因爲我有許多需要傳遞給動作的「友善」 –

回答

2

其實 - 你不需要使用許多規則:

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

本質上講,當有人瀏覽到yoursite.com/manufacturer - 製造商控制器將被調用,因爲一個動作沒有定義 - 它將默認爲索引。所以,你可以做的就是:

Router::connect('/manufacturer/*', array('controller' => 'categories', 'action' => 'view')); 

現在,當有人瀏覽到yoursite.com/manufacturer - 請求被轉發到類別控制器,調用視圖操作。 '/ *'保證了任何進一步的參數也被轉發到那裏。

所以,當有人訪問yoursite.com/manufacturer/iamfriendly/iamfriendlytoo - 那麼你就可以得到那些通過PARAMATERS /變量通過

$this->params['pass'] 

或者:

$this->passedArgs 

給你以下array:

Array 
(
    [0] => iamfriendly 
    [1] => iamfriendlytoo 
) 

您可以通過使用命名參數進一步增強此功能,所以你收到這樣的:

Array 
(
    ['manufacturer'] => iamfriendly 
    ['friendly0'] => iamfriendlytoo 
) 
+0

我不會無視你,今天就去檢查一下,謝謝你的回覆 –

+0

感謝您的幫助,不知道爲什麼我這麼複雜的事情了,幹活了,乾杯 –

+0

沒問題!很高興幫助! –

0

不使用「:friendly0」,「:friendly1」,「:friendly2」等,這使得他們在您的網址排列的按鍵。這就是爲什麼你需要在'傳遞'數組中再次傳遞它們。

什麼Shaz建議是正確的:

Router::connect('/manufacturer/*', array('controller'=>'categories', 'action'=>'view')); 

如果你通過他們你現在就做的方式,這將是自變量在您的視圖()函數的變量數。在pages_controller中查看它是如何處理的。但我會建議使用命名參數。