Zend framework Zend_路由器要求不匹配

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

我有两个路由匹配具有相同外观模式的url,区别在于$actionRoute,只有当变量:action on on it等于'myaction'时才应该匹配

如果我转到/en/mypage/whatever/myaction它会按预期通过$actionRoute。
如果我转到/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'。