Zend_Router参数异常

时间:2010-10-15 17:38:52

标签: zend-framework zend-route

我的问题是我想要一些通过URL传递的参数值,不要触发Zend路由,但会导致默认的控制器/动作对。

现在我在index.php中有以下内容:

    // *** routing info ***
$router = Zend_Controller_Front::getInstance()->getRouter();
$router->addRoute('showpage', new Zend_Controller_Router_Route('/show/:title',
                                                               array('controller' => 'Show',
                                                                       'action' => 'page')));
// annoying exceptions :(
$router->addRoute('addshow', new Zend_Controller_Router_Route('/show/add',
                                                               array('controller' => 'Show',
                                                                       'action' => 'add')));
$router->addRoute('saveshow', new Zend_Controller_Router_Route('/show/save',
                                                               array('controller' => 'Show',
                                                                       'action' => 'save')));
$router->addRoute('addepisode', new Zend_Controller_Router_Route('/show/addEpisode',
                                                               array('controller' => 'Show',
                                                                       'action' => 'addEpisode')));
$router->addRoute('saveepisode', new Zend_Controller_Router_Route('/show/saveEpisode',
                                                               array('controller' => 'Show',
                                                                       'action' => 'saveEpisode')));

没有最后4个路由器,网址/show/add会导致show/page,带有title =='add'。 请各位帮忙。

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式拒绝添加,保存,添加动画和保存剧集

$router->addRoute(
  'showpage', 
  new Zend_Controller_Router_Route(
    '/show/:title',
    array(
      'controller' => 'show',
      'action' => 'page'
    ),
    array(
      'title' => '(?:(?!add)(?!save)(?!addEpisode)(?!saveEpisode).)+'
    )
  )
)

答案 1 :(得分:0)

首先,使用Zend_Controller_Router_Route_Static作为静态路由。

其次,我很确定你不需要包含前导斜杠,但我不确定这是否是一个问题。

由于路线按相反的顺序匹配,你的工作应该有效(我认为)。对于任何与“saveEpisode”,“addEpisode”,“save”或“add”不匹配的内容,它应该落到“showpage”路线。

我能想到的另一件事就是让“showpage”路线更具体,比如

'show/page/:title'