2010-11-05 62 views
1

我有這個路由的Zend:如何路由一些行動

$router->addRoute('clinics', 
new Zend_Controller_Router_Route('clinics/:clinicPath', array('controller' => 'clinics', 'action' => 'view')), 
new Zend_Controller_Router_Route('clinics/create', array('controller' => 'clinics', 'action' => 'create1'))); 

,我想,如果我去「診所/製造」和視診,如果我去別的創造診所(做createAction)(前'clinic/happyTooth')。

現在任何鏈接上升查看事件。如何改變這一點? thx。

+2

您是否嘗試過把「診所/打造」第一條路線? – 2010-11-05 19:44:08

+0

是的,嘗試 - 每個診所鏈接成爲'診所/創建' – 2010-11-06 11:13:35

回答

1

我認爲你需要的路線上添加規則,嘗試:

new Zend_Controller_Router_Route('clinics/:clinicPath', 
    array('controller' => 'clinics', 'action' => 'view'), 
    array('clinicPath' => '(?!create)[a-z\-0-9^.]+')), 
+0

你可以寫普通的expr嗎?例如創建,刪除和編輯操作?謝謝! – 2010-11-06 11:20:30

+1

您可以添加|要執行OR,請嘗試(?!創建|刪除|編輯)[a-z \ -0-9 ^。] + – subosito 2010-11-06 11:30:14

1

我想最簡單的方法是使用ClinicsController的魔術__call函數,並做一個匹配的方法調用(並使用默認路由)。

1

您沒有正確地呼叫addRoute($name, $route)。您應該調用它兩次(每個路由一次),或致電addRoutes(array($route1, $route2))。這可能是你的問題的原因。

路線按相反順序匹配,所以您的訂單是正確的。 「創建」是特定的,因此您希望它位於列表的底部,因此它在上面的動態路由之前匹配。