问题
I have two modules Admin and Application. In the module application I have the following route in my module.config.php:
'admin' => array(
'type' => 'Segment',
'options' => array(
'route' => '/admin[/:controller[/:action]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array (
'__NAMESPACE__' => 'Admin\Controller',
'module' => 'Admin',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'wildcard' => array(
'type' => 'Wildcard'
)
)
),
The problem is that it is matching
example.com/admin
and is not matching
example.com/admin/
How do I fix that?
回答1:
Insert [/]
to fix it. try:
'route' => '/admin[/:controller[/:action]][/]',
回答2:
You can add an optional child-route which matches only a /. That should also work for the same problem with a wildcard (sub)route.
'admin' => array(
'type' => 'Segment',
'options' => array(
'route' => '/admin[/:controller[/:action]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array (
'__NAMESPACE__' => 'Admin\Controller',
'module' => 'Admin',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'wildcard' => array(
'type' => 'Wildcard'
'may_terminate' => true,
'child_routes' => array(
'ts' => array(
'type' => 'literal',
'options' => array('route' => '/' )
),
)
),
'ts' => array(
'type' => 'literal',
'options' => array('route' => '/')
),
)
),
来源:https://stackoverflow.com/questions/20414479/zend-framework-2-segment-route-matching-test-but-not-test