0

我的路线如下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

有任何想法吗?

4

3 回答 3

1

你在正确的轨道上!使用“Wilcard”作为您的管理路由的一种子路由。

有两个选项可用:key_value_delimiterparam_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'));
于 2015-03-28T19:22:14.480 回答
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][/]',
于 2013-12-17T04:12:02.290 回答
0

如果我理解正确,您正在尝试从 URL 获取多个参数,对吗?

例如

传统 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%',
            )

这样,“admin/customer/edit/”之后的每个字符都将存储在“keyValuePairs”参数中。在 Controller::yourAction 中,获取 'keyValuePairs' 参数,然后将字符串拆分回有意义的键值数据结构。

于 2014-04-01T09:11:11.507 回答