Zend framework2 ZF2-尝试创建类似ZF1的路由

Zend framework2 ZF2-尝试创建类似ZF1的路由,zend-framework2,zend-framework-routing,Zend Framework2,Zend Framework Routing,实际上,我的ZF2应用程序中有两个模块(应用程序和管理),我想要一个类似ZF1的url路由。我目前有以下路线: “路由器”=>阵列 ( “路由”=>数组 ( “admin”=>数组 ( '类型'=>'段', “选项”=>数组 ( “路由”=>“管理员/[:控制器[/:操作]]”, '约束'=>数组 ( “控制器”=>“[a-zA-Z][a-zA-Z0-9_-]*”, “行动”=>“[a-zA-Z][a-zA-Z0-9_u-]*”, ), “默认值”=>数组 ( “\uuuu名称空间”=>“管理员

实际上,我的ZF2应用程序中有两个模块(应用程序和管理),我想要一个类似ZF1的url路由。我目前有以下路线:

“路由器”=>阵列
(
“路由”=>数组
(
“admin”=>数组
(
'类型'=>'段',
“选项”=>数组
(
“路由”=>“管理员/[:控制器[/:操作]]”,
'约束'=>数组
(
“控制器”=>“[a-zA-Z][a-zA-Z0-9_-]*”,
“行动”=>“[a-zA-Z][a-zA-Z0-9_u-]*”,
),
“默认值”=>数组
(
“\uuuu名称空间”=>“管理员\控制器”,
“控制器”=>“索引”,
“操作”=>“索引”,
),
),
“may_terminate”=>true,
“子路由”=>数组
(
“通配符”=>数组
(
'类型'=>'通配符'
)
)
),
),
),
因此它将匹配“/admin”、“/admin/controller”、“/admin/controller/action”,但不匹配“/controller/action”

现在我需要一条到应用程序模块的路径。问题是,如果我只是在模块应用程序中使用类似的路由,那么这个新路由将匹配“/admin/controller”作为controller=“admin”和action=“controller”

我还在应用程序中尝试了以下正则表达式路径:

“应用程序”=>数组
(
'type'=>'Regex',
“选项”=>数组
(
“regex'=>'/(?^(?)(管理)$)[a-zA-Z][a-zA-Z0-9_-]*)?”。
“(/[a-zA-Z][a-zA-Z0-9_-]*)?”,
“规范”=>“/%controller%/%action%”,
/*'约束'=>数组
(
//控制器不能是“管理员”
“控制器”=>“^(?(管理员)$)[a-zA-Z][a-zA-Z0-9_-]*”,
“行动”=>“[a-zA-Z][a-zA-Z0-9_u-]*”,
),*/
“默认值”=>数组
(
“\uuuu名称空间”=>“应用程序\控制器”,
“控制器”=>“索引”,
“操作”=>“索引”,
),
),
“may_terminate”=>true,
“子路由”=>数组
(
“通配符”=>数组
(
'类型'=>'通配符'
)
)
),
但它没有得到变量“控制器”和“动作”


有人对如何解决这个问题有什么建议吗?

请注意路由顺序:路由是使用后进先出堆栈处理的,因此在匹配请求URL时,数组中最后一个出现的内容首先出现

这意味着您必须首先定义最通用的路由,以防止它们匹配相似但更具体的路由

使用以下顺序不需要对
控制器
参数进行任何约束,因为以
/admin
开头的任何内容都将首先匹配

'route1' => array(
    'type' => 'Segment',
    'options' => array(
        'route' => '/[:controller[/:action]]',
        'defaults' => array (
            'controller' => 'controller',
            'action' => 'index',
        ),
    ),
),
'route2' => array(
    'type' => 'Segment',
    'options' => array(
        'route' => '/admin[/:controller[/:action]]',
        'defaults' => array (
            'controller' => 'admin-controller',
            'action' => 'index',
        ),
    ),
),
此外,您始终可以使用
priority
属性(不应在
options
数组下定义,而应在路由的最顶端数组中定义)指定不符合条件的路由优先级,因此以下代码相当于上一个示例:

'route2' => array(
    'type' => 'Segment',
    'options' => array(
        'route' => '/admin[/:controller[/:action]]',
        'defaults' => array (
            'controller' => 'admin-controller',
            'action' => 'index',
        ),
    ),
),
'route1' => array(
    'type' => 'Segment',
    'options' => array(
        'route' => '/[:controller[/:action]]',
        'defaults' => array (
            'controller' => 'controller',
            'action' => 'index',
        ),
    ),
    'priority' => -1,
),