4

是否可以使用包含正斜杠的参数组装一条路线?

配置:

'someroute' => array(
       'type' => 'Zend\Mvc\Router\Http\Segment',
       'options' => array(
                'route' => 'someroute/:path',
                'defaults' => array(
                    'controller' => 'Controller',
                    'action' => 'index'
                ),
                'constraints' => array(
                    'path' => '(.)+'
                )
       )
 )

控制器:

$path = 'some/subdirectory';
$this->url('someroute', array('path' => $path));

结果是:

http://host.name/someroute/some%2Fsubdirectory
4

3 回答 3

2

只需使用regex路由类型:

'path' => array(
    'type' => 'regex',
    'options' => array(
        'regex' => '/path(?<path>\/.*)',
        'defaults' => array(
            'controller' => 'explorer',
            'action' => 'path',
        ),
        'spec' => '/path%path%'
    )
)
于 2015-04-16T14:25:31.277 回答
2

在视图中使用rawurldecode()当然可以解决这个问题。

于 2013-05-28T15:55:58.350 回答
2

我遇到了类似的问题,所以我将使用 Zend 3 找到的解决方案发布到我的项目中。

默认情况下,Symfony/Zend Routing 组件要求参数匹配以下正则表达式:[^/]+。这意味着允许除 / 之外的所有字符。

您必须通过为其指定更宽松的正则表达式来明确允许 / 成为占位符的一部分:

  'type' => Segment::class,
                'options' => [
                    'route' => '/imovel[/:id][/:realtor][/:friendly]',
                    'constraints' => array(
                        'friendly' => '.+',
                        'id' => '[0-9]+',
                        'realtor' => 'C[0-9]+'
                    ),
                    'defaults' => [
                        'controller' => Controller\PropertyController::class,
                        'action' => 'form'
                    ]
                ]

基本上,您可以允许所有字符,然后在操作中进行检查/尝试捕获/验证。

参考: 如何在路由参数中允许“/”字符

于 2017-09-21T20:03:53.533 回答