Php 基于路由约束的ZF2多控制器路由

Php 基于路由约束的ZF2多控制器路由,php,routing,zend-framework2,Php,Routing,Zend Framework2,我正在重构一个项目中的一些路由,并试图保留以下的当前路径结构 /事件该配置中有两个问题 第一:匹配规则。 由于匹配不完全基于正则表达式,因此今年正确的“模式”是'2012 | 2013 | 2014' 第二:匹配顺序。 根据: 最后一条路线将首先匹配。由于2012与\d{4}匹配,您必须首先测试这些“异常” 只需在超级碗标准后放置superbowl存档路径,它就可以工作了 “路由器”=>[ “路线”=>[ “事件”=>[ 'type'=>'literal', “选项”=>[ “路由”=>“/e

我正在重构一个项目中的一些路由,并试图保留以下的当前路径结构



/事件该配置中有两个问题

第一:匹配规则。 由于匹配不完全基于正则表达式,因此今年正确的“模式”是
'2012 | 2013 | 2014'

第二:匹配顺序。 根据:

最后一条路线将首先匹配。由于2012与
\d{4}
匹配,您必须首先测试这些“异常”

只需在超级碗标准后放置
superbowl存档
路径,它就可以工作了

“路由器”=>[
“路线”=>[
“事件”=>[
'type'=>'literal',
“选项”=>[
“路由”=>“/events”,
“默认设置”=>[
“控制器”=>“事件”,
'操作'=>'索引'
]
],
“may_terminate”=>true,
“子路由”=>[
“超级碗”=>[
'类型'=>'段',
“选项”=>[
“路线”=>“/超级碗”,
“默认设置”=>[
“动作”=>“超级碗”
]
]
],
“超级碗标准”=>[
'类型'=>'段',
“选项”=>[
“路线”=>“/[:年]-超级碗”,
'约束'=>[
'年份'=>'\d{4}'
],
“默认设置”=>[
“控制器”=>“超级碗标准”,
'操作'=>'索引'
]
]
],
“超级碗档案”=>[
'类型'=>'段',
“选项”=>[
“路线”=>“/[:年]-超级碗[/:detail],
'约束'=>[
“年份”=>“2012 | 2013 | 2014”
],
“默认设置”=>[
“控制器”=>“超级碗档案”,
'操作'=>'索引'
]
]
]
]
]
]
],
'router' => [
    'routes' => [
        'events' => [
            'type'    => 'literal',
            'options' => [
                'route'    => '/events',
                'defaults' => [
                    'controller' => 'events',
                    'action'     => 'index',
                ],
            ],
            'may_terminate' => true,
            'child_routes' => [
                'super-bowl' => [
                    'type'    => 'segment',
                    'options' => [
                        'route'       => '/super-bowl',
                        'defaults'    => [
                            'action' => 'superBowl',
                        ],
                    ],
                ],
                'super-bowl-archives' => [
                    'type'    => 'segment',
                    'options' => [
                        'route'       => '/[:year]-super-bowl[/:detail]',
                        'constraints' => [
                            'year' => '^(2012|2013|2014)',
                        ],
                        'defaults'    => [
                            'controller' => 'super-bowl-archives',
                            'action' => 'index',
                        ],
                    ],
                ],
                'super-bowl-standard' => [
                    'type'    => 'segment',
                    'options' => [
                        'route'       => '/[:year]-super-bowl',
                        'constraints' => [
                            'year' => '\d{4}'
                        ],
                        'defaults'    => [
                            'controller' => 'super-bowl-standard',
                            'action' => 'index',
                        ],
                    ],
                ],

            ],
        ],
    ],
],
Routes will be queried in a LIFO order, and hence the reason behind the name RouteStack