假设我有一个相当标准的路由定义,例如针对用户的东西:
'router' => array(
'routes' => array(
'user' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/user[/:action]',
'constraints' => array('action' => '[a-zA-Z0-9_-]*'),
'defaults' => array(
'controller' => 'usercontroller',
'action' => 'index',
),
),
),
),
),
现在,假设我想对“用户”操作的不同组使用不同的控制器。例如,说一个或两个动作(例如“特殊”和“超级”)应该交给“特殊控制器”。我该如何配置?我尝试使用'child_routes'无济于事,并且尝试在'routes'数组中包含多个'user'条目,但没有任何乐趣。
您可以创建一个带有子路由类型segment的路由类型文字:
'router' => array(
'routes' => array(
'user' => array(
'type' => 'Literal',
'options' => array(
'route' => '/user',
'defaults' => array(
'__NAMESPACE__' => 'MyModule\Controller',
'controller' => 'User',
'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' => '[0-9]+',
),
'defaults' => array(
),
),
),
),
),
),
),
或者,如果愿意,可以直接在路由类型网段中将控制器名称声明为路由参数:
'router' => array(
'routes' => array(
'user' => array(
'type' => 'Segment',
'options' => array(
'route' => '/[:controller[/:action[/:id]]]',
'defaults' => array(
'__NAMESPACE__' => 'MyModule\Controller',
'controller' => 'User',
'action' => 'index',
),
),
),
),
),
我更喜欢第一种避免模块控制器之间路由冲突的方法
如果您对应用程序的特定部分(此处为:用户)具有多个控制器,并且在同一模块中控制了应用程序的多个部分=>将控制器组织在不同的名称空间中,例如:
namespace MyModule\Controller\Users;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句