Php Zend Framework 2路由未指向正确的操作

Php Zend Framework 2路由未指向正确的操作,php,routing,zend-framework2,Php,Routing,Zend Framework2,因此,在我的module.config.php中,我有两条路由,一条指向Panel/Index控制器,它正在工作,另一条指向Panel\Ads问题是这条路由有一个子路由,调用了edit,当我访问路径site.com/panel/ads/edit/34时,它仍然从ads控制器指向操作索引,它应该指向edit操作。有人能解释一下我做错了什么吗 <?php return array( 'router' => array( 'routes' => array(

因此,在我的
module.config.php
中,我有两条路由,一条指向
Panel/Index
控制器,它正在工作,另一条指向
Panel\Ads
问题是这条路由有一个子路由,调用了
edit
,当我访问路径
site.com/panel/ads/edit/34
时,它仍然从
ads
控制器指向操作
索引
,它应该指向
edit
操作。有人能解释一下我做错了什么吗

<?php

return array(
    'router' => array(
        'routes' => array(
            'panel' => array(
                'type' => 'Zend\Mvc\Router\Http\Literal',
                'options' => array(
                    'route' => '/panel',
                    'defaults' => array(
                        'controller' => 'Panel\Controller\Index',
                        'action' => 'index',
                    ),
                ),
            ),
            'panel' => array(
                'type' => 'Literal',
                'options' => array(
                    'route' => '/panel',
                    'defaults' => array(
                        '__NAMESPACE__' => 'Panel\Controller',
                        'controller' => 'Index',
                        'action' => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'default' => array(
                        'type' => 'Segment',
                        'options' => array(
                            'route' => '/[:controller[/:action]]',
                            'constraints' => array(
                                'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                                'actions' => 'index'
                            ),
                        ),
                    ))),


            'ads' => array(
                'type' => 'Zend\Mvc\Router\Http\Literal',
                'options' => array(
                    'route' => '/panel/ads',
                    'defaults' => array(
                        'controller' => 'Panel\Controller\Ads',
                        'action' => 'index',
                    ),
                ),
            ),
            'ads' => array(
                'type' => 'Literal',
                'options' => array(
                    'route' => '/panel/ads',
                    'defaults' => array(
                        '__NAMESPACE__' => 'Panel\Controller',
                        'controller' => 'Ads',
                        'action' => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'default' => array(
                        'type' => 'Segment',
                        'options' => array(
                            'route' => '/[:controller[/:action]]',
                            'constraints' => array(
                                'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                                'actions' => 'index'
                            ),
                        ),
                    ),

                    'edit' => array(
                        'type' => 'Segment',
                        'options' => array(
                            'route' => '/edit/[:id]',
                            'constraints' => array(
                                'controller' => 'Ads',
                                'action' => 'edit',
                            ),
                            'defaults' => array(
                                'actions' => 'edit'
                            ),
                        ),
                    )

                     )) 
        )),
    'controllers' => array(
        'invokables' => array(
            'Panel\Controller\Index' => 'Panel\Controller\IndexController',
            'Panel\Controller\Add' => 'Panel\Controller\AddController',
            'Panel\Controller\Ads' => 'Panel\Controller\AdsController'
        ),
    ),
    'view_manager' => array(
        'template_path_stack' => array(
            __DIR__ . '/../view',
        ),
    ),
);

我想问题在于
编辑路径中的约束。约束应该是限制路由中变量匹配的正则表达式模式。例如,您可能希望指定URL中的
id
必须是数字。您的编辑路线对
控制器
操作
具有约束,这两个约束都不是路线中的变量,因此我不确定ZF将如何处理它们

您的配置还存在一些其他问题。首先,路由名称必须是唯一的。您正在定义名为
面板
的两条路由,以及名为
广告
的两条路由。更重要的是,PHP数组中的键必须是唯一的,因此在每种情况下,第二个键都将覆盖第一个键

您的第一个面板路径和第一个广告路径都是不必要的,因为在每种情况下,第二个路径都将匹配
site.com/panel
site.com/ads

尝试以下方法:

return array(
    'router' => array(
        'routes' => array(
            'panel' => array(
                'type' => 'Literal',
                'options' => array(
                    'route' => '/panel', 
                    'defaults' => array(
                        '__NAMESPACE__' => 'Panel\Controller',
                        'controller' => 'Index',
                        'action' => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'default' => array(
                        'type' => 'Segment',
                        'options' => array(
                            'route' => '/[:controller[/:action[/:id]]]',
                            'constraints' => array(
                                'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'id' => '[a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(),
                        ),
                    ),
                ),
            ),
        ),
    ),
);

找到它,错误就在
编辑广告
路线上

),
'defaults' => array(
'actions' => 'edit'

这应该是
action
,结尾没有
s
,重命名后它就工作了

@doydoy44为什么建议删除
zend framework
标记?这没有道理。应添加官方语言标记。@RahilWazir:我建议删除zend framework标记,因为这是zend-framewok2(版本2)的问题,而不是zend framework(版本1)的问题。zend framework标记是关于zend framework版本1谢谢,我删除了第一个面板路由和第一个ads路由,仍然不起作用,我注意到如果我将
ads
路由中的操作
index
更改为
edit
,而不是指向编辑,但索引操作将不再起作用