Zend路由正则表达式问题

时间:2011-08-21 15:45:58

标签: php zend-framework multilingual zend-route

我正在开发一个多语言Zend项目。我正在创建事件,所以我想使用这样的结构:

  • domain.com/event/2010/ => 2010年的活动
  • domain.com/event/2010/11/ => 2010年11月的活动
  • domain.com/event/2010/11/23/ => 2010年11月23日的活动

对于这个pourpuse,我创建了以下路线:

$router->addRoute('event', new Zend_Controller_Router_Route_Regex('event/(\d+)(/(\d+)(/(\d+))?)?', array(
                    'module' => 'public',
                    'controller' => 'event',
                    'action' => 'show'
                )));

$router->addRoute('eventLang', new Zend_Controller_Router_Route_Regex(':language/event/(\d+)(/(\d+)(/(\d+))?)?', array(
                    'language'=>'en'
                    'module' => 'public',
                    'controller' => 'event',
                    'action' => 'show'
                )));

第一个完美无缺。第二个显示错误,如“动作2010不存在”。这有什么问题???

1 个答案:

答案 0 :(得分:1)

您不能在Zend_Controller_Router_Route_Regex中使用变量(在您的情况下为:language)。您应该以下一种方式重写您的正则表达式:

$router->addRoute('eventLang', new Zend_Controller_Router_Route_Regex('[^/]+/event/(\d+)(/(\d+)(/(\d+))?)?', array(
    'module' => 'public',
    'controller' => 'event',
    'action' => 'show'
), array(
    1 => 'language'
));