Zend framework Zend_路由器要求不匹配
我有两个路由匹配具有相同外观模式的url,区别在于$actionRoute,只有当变量:action on on it等于'myaction'时才应该匹配 如果我转到/en/mypage/whatever/myaction它会按预期通过$actionRoute。Zend framework Zend_路由器要求不匹配,zend-framework,Zend Framework,我有两个路由匹配具有相同外观模式的url,区别在于$actionRoute,只有当变量:action on on it等于'myaction'时才应该匹配 如果我转到/en/mypage/whatever/myaction它会按预期通过$actionRoute。 如果我转到/en/mypage/whatever/blahblah,它将被$actionRoute拒绝,并与$genRoute匹配。 如果我转到/en/mypage/which它应该由$genRoute匹配,但是它由$actionRou
如果我转到/en/mypage/whatever/blahblah,它将被$actionRoute拒绝,并与$genRoute匹配。
如果我转到/en/mypage/which它应该由$genRoute匹配,但是它由$actionRoute匹配,而不是抛出和异常,因为操作noactionAction()不存在 我不知道我做错了什么,非常感谢你的帮助
$genRoute = new Zend_Controller_Router_Route(
':lang/mypage/:var1/:var2',
array(
'lang' => '',
'module' => 'mymodule',
'controller' => 'index',
'action' => 'index',
'var1' => 'noone',
'var2' => 'no'
),
array(
'var1' => '[a-z\-]+?',
'lang' => '(es|en|fr|de){1}'
)
);
$actionRoute = new Zend_Controller_Router_Route(
':lang/mypage/:var1/:action',
array(
'lang' => '',
'module' => 'mymodule',
'controller' => 'index',
'action' => 'noaction',
'var1' => 'noone',
),
array(
'action' => '(myaction)+?',
'var' => '[a-z\-]+?',
'lang' => '(es|en|fr|de){1}',
)
);
$router->addRoute('genroute',$genRoute);
$router->addRoute('actionroute',$actionRoute);
通过在$actionRoute中为action提供默认值('noaction'),可以使该变量成为可选变量。如果你移除这个,它应该可以正常工作。另外,第二条路径中regexp模式中的'var'键可能应该是'var1',就像第一条路径中的一样 因此,您可能希望您的第二条路线是:
$actionRoute = new Zend_Controller_Router_Route(
':lang/mypage/:var1/:action',
array(
'lang' => '',
'module' => 'mymodule',
'controller' => 'index',
'var1' => 'noone',
),
array(
'action' => '(myaction)+?',
'var1' => '[a-z\-]+?',
'lang' => '(es|en|fr|de){1}',
)
);
嗨,Tim,它不工作,它抛出一个异常,消息是“action is not specified”。不管怎样,谢谢。奇怪的是,我已经测试了你的示例代码,并且它确实适用于我。您使用的是什么版本的ZF?另一个黑客解决方案是将$actionRoute中的action替换为'myaction',删除action的regexp并在第一个数组中将action硬编码为'myaction'。