我有两条匹配具有相同明显模式的网址的路由,不同之处在于$ actionRoute,只有在变量:action on it等于'myaction'时才应该匹配。
如果我转到 / en / mypage / whatever / myaction ,它会通过$ actionRoute按预期进行。
如果我去 / en / mypage / whatever / blahblah ,它会被$ actionRoute拒绝并与$ genRoute匹配。
如果我转到 / en / mypage / what 它应该与$ genRoute匹配,但它会被$ actionRoute匹配而不是throw和exception,因为动作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);
答案 0 :(得分:0)
通过在$ actionRoute中为操作提供默认值('noaction'),您可以使该变量成为可选项。如果你删除它,它应该都可以正常工作。第二条路线中正则表达式模式中的'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}',
)
);