我的module.config.php
中有以下路线:
'routes' => array(
'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',
)
),
'priority' => 1000
),
),
路线末尾[/]
的原因在于:Zend Framework 2 Segment Route matching 'test' but not 'test/'
我希望这条路线与ZF1一样。我想在其中传递$_GET parameters
(例如/id/1/test/2/
)。
此路线实际上与/admin/customer/edit//id/20
匹配但不匹配/admin/customer/edit/id/20
有什么想法吗?
答案 0 :(得分:1)
你走在正确的轨道上!使用"威尔卡"作为管理路线的一种子路线。
有两种选择: key_value_delimiter 和 param_delimiter 。 这两个默认值都是' /'这等于路由参数的ZF1默认行为。
'router' => array(
'routes' => array(
'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',
'options' => array(
'key_value_delimiter' => '/',
'param_delimiter' => '/'
)
)
)
)
)
)
如果你想在url view-helper的帮助下解决通配符路由,你可以这样使用它:
$this->url('admin/wildcard', array('id' => 1234, 'foo' => 'bar'));
答案 1 :(得分:0)
您可以为id:
添加路由参数'route' => '/admin[/:controller[/:action]][/:id][/]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]+',
'action' => '[a-zA-Z][a-zA-Z0-9_-]+',
'id' => '[0-9]+',
),
此路由匹配admin/customer/edit/20/
,因此您可以在控制器中获取ID:
$this->params()->fromRoute('id');
如果您想admin/customer/edit/id/20/
,请尝试:
'route' => '/admin[/:controller[/:action]][id/:id][/]',
答案 2 :(得分:0)
如果我理解正确,您正试图从URL获取多个参数,对吗?
e.g。
传统GET:www.domain.com/ctrl/action?key1=abc&key2=efg& ......& keyN = XYZ
ZF2路线:www.domain.com/ctrl/action/key1/abc/key2/efg /.../ keyN / xyz
如果是这样,这是一种方法:
'adminPage' => array(
'type' => 'regex',
'options' => array(
'regex' => '/admin/customer/edit[/](?<keyValuePairs>.*)',
'defaults' => array(
'controller' => 'YourProject\Controller\YourController',
'action' => 'yourAction',
),
'spec' => '/admin/customer/edit/%keyValuePairs%',
)
有了这个,管理员/客户/编辑/&#39;将被存储在&#39; keyValuePairs&#39;参数。在Controller :: yourAction中,获取&#39; keyValuePairs&#39;参数,然后将字符串拆分回有意义的键值数据结构。