2012-09-11 283 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)现在将被路由到您所需的控制器/视图。

希望工程.. :)(如果它不请赐教:))