2013-02-13 52 views
0

首先,我想這樣做,當用戶導航到test.com/username這將他帶到test.com/account/profile/name/username,所以我添加了這條路線Zend路線越來越混亂

$fc = Zend_Controller_Front::getInstance(); 
    $router = $fc->getRouter(); 
    $route = new Zend_Controller_Router_Route(
      ':name', 
      array('controller' => 'account', 'action' => 'profile')); 

    $router->addRoute('profile',$route); 

和它使人們的工作,但現在當我使用下面的鏈接

<a href="<?php echo $this->url(array(
       'controller' =>'account', 
       'action'=>'update'), 'default',true);?>">Settings</a> 

我猜它被「混亂」,並使用上述路線,因爲它沒有去測試。 com/account/update ..

我是否必須爲更新操作添加其他路由?這不是說我必須爲與帳戶控制器相關的所有操作添加新路線嗎?

這裏有什麼幫助嗎? :)

編輯:問題是,該鏈接重定向到test.com/account/update,但它認爲「帳戶」是上述路由中定義的參數(如在test.com/name ),而不是控制器,因此將其重定向到「配置文件」操作。

+1

從你的問題來看,問題不是很清楚。 URL助手是輸出錯誤的lin,還是輸出的鏈接被錯誤的路由匹配?或者你只是不確定如何將動作傳遞給你的個人資料路線? – 2013-02-13 19:41:24

+0

對不起,我更新了這篇文章,希望現在有點清楚.. – Systemfreak 2013-02-13 19:46:28

+0

因此,您的個人資料路線中是否有/ account/update的請求?因爲我沒有看到具有兩個參數的路線可以如何與具有一個參數的路線相匹配。這些路線是否明確定義爲您的問題? – 2013-02-14 09:13:17

回答

0

url /my-name與默認路由匹配。因爲:

  1. 路由器嘗試在他們指定的順序匹配路線,
  2. 默認路由之前,你自己命名爲「曲線」途徑

「默認」路由添加是被使用的那個。

解決方案是讓您的路線從最具體到最一般的定義。

因此,就你的情況而言,我會嘗試(在引導過程中)刪除默認路由,添加名爲'profile'的路由,然後添加回默認路由。

作爲一個側面說明:隨着你定義它,如果你想擁有像靜態頁面的URL /contact,​​,等等,這些都會前使用定義定製路由的「個人資料」路線的「配置文件'路線,以便'配置文件'路線沒有機會與他們匹配並重定向。

更新

由於@TimFountain提醒我下面,路線在反向順序匹配,所以我的上述具體的建議實際上不是正確的。但顯然秩序是問題。

+1

實際上路線是按相反的順序匹配的,所以你最高優先級的路線應該最後定義 – 2013-02-14 09:09:19

+0

順序很重要,我並不真的知道。感謝大衛和蒂姆,其實是的,他們是相反的順序匹配,所以,因爲我改變了一點,一切正常。 – Systemfreak 2013-02-14 10:21:55

+0

Yikes!我無法相信我弄錯了那一個。感謝您的更正,@TimFountain。刪除我的答案,因爲它是錯的。 – 2013-02-14 15:58:52