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
,而不是指向编辑,但索引操作将不再起作用