0

那是我的两个路由器:

->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>

经验。查看新闻网址:

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

但是,为什么当我点击一个 href 时,它会将我重定向到“viewnews”?

4

1 回答 1

1

根据我的经验(这不是很好:))我认为当您在名称前使用冒号时,当您定义路由器时,例如

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

您告诉路由器要做的是将遵循上述格式('/:mCat/:mCatSub/:mId/:mTitle')的任何 url 路由到您在此处提到的控制器/操作。例如。

一些控制器/动作/x/y

或者

anoCont/act/a/b

将被路由到相同的控制器/动作。

因此,在您的情况下,您正在定义两个具有相同选项的路由器(这会产生歧义),并且默认情况下使用第二个定义的路由(从下到上匹配)。

你可以使用这样的东西

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

所以任何以'test'作为控制器(在url中)开头的东西现在都将被路由到你想要的控制器/视图。

希望它有效.. :) (如果没有请赐教:))

于 2012-09-12T03:45:17.377 回答