1

我的问题是我想要一些通过 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 个路由器,则 URL/show/add指向show/page,带有 title == 'add'。请,每一个帮助将不胜感激。

4

2 回答 2

1

您可以使用正则表达式来拒绝添加、保存、addEpisode 和 saveEpisode

$router->addRoute(
  'showpage', 
  new Zend_Controller_Router_Route(
    '/show/:title',
    array(
      'controller' => 'show',
      'action' => 'page'
    ),
    array(
      'title' => '(?:(?!add)(?!save)(?!addEpisode)(?!saveEpisode).)+'
    )
  )
)
于 2010-10-19T06:30:17.380 回答
0

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

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

由于路线以相反的顺序匹配,因此您的路线应该可以工作(我认为)。对于与“saveEpisode”、“addEpisode”、“save”或“add”不匹配的任何内容,它应该落入“showpage”路线。

我能想到的唯一另一件事是让“展示页面”路线更具体,比如

'show/page/:title'
于 2010-10-19T03:50:56.077 回答