我的问题是我想要一些通过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'。
请各位帮忙。
答案 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'