2012-09-11 173 views
0

這是我的兩個路由器:Zend框架:路由器

->addRoute('viewTextMaterial', new Zend_Controller_Router_Route(':mCat/:mCatSub/:mId/:mTitle', array('controller' => 'index', 'action' => 'viewtextmaterial'))) 
->addRoute('viewNews', new Zend_Controller_Router_Route(':nCat/:nId/:nTitle/:page', array('controller' => 'index', 'action' => 'viewnews'))) 

在index.phtml文件我補充一點:

<a href="<?= $this->url(array('mCat' => 'Test', 'mCatSub' => 'Test', 'mId' => 7, 'mTitle' => 'Test'), 'viewTextMaterial') ?>">Test</a> 

進出口。對於viewnews網址:

<a href="<?= $this->url(array('nCat' => News, 'nId' => 5, 'nTitle' => Some title, 'page' => 1), 'viewNews') ?>">some text</a> 

但爲什麼,當我點擊A HREF,它重定向我 'viewnews'?

+0

你真的有一個'IndexController'用'viewtextmaterial'和'viewnews'行動? – Raffaele

+0

是的IndexController我有viewtextmaterial和viewnews操作。 – Defense

+0

你能否給我們提供'viewTextMaterial'和'viewNews'路線的例子嗎? – raina77ow

回答

1

根據我的經驗(這是不是很偉大的:)) 我認爲當你在名稱前面使用冒號,當你定義路由器 即像

'/:mCat/:mCatSub/:mId/:mTitle', 
     array(
      'controller' => 'index', 
      'action' => 'viewtextmaterial' 
      ) 

你告訴路由器要做的是按照上面的格式('/:mCat /:mCatSub /:mId /:mTitle')路由任何url,將其路由到您在那裏提到的控制器/操作。例如。

someController /動作/ X/Y

anoCont /動作/ A/B

將被路由到相同的控制器/動作。

所以你的情況你在做什麼是您所定義的兩個路由器具有相同的選項(產生歧義),默認情況下第二個定義路由使用(從下到上的匹配)。

你可以使用這樣的事情

'/test/:mCatSub/:mId/:mTitle', 
      array(
       'controller' => 'index', 
       'action' => 'viewtextmaterial' 
       ) 

所以任何以「test」作爲控制器啓動(在URL)現在將被路由到您所需的控制器/視圖。

希望工程.. :)(如果它不請賜教:))