Php 带斜杠的ZF2路由参数
是否可以使用包含正斜杠的参数组合管线 配置:Php 带斜杠的ZF2路由参数,php,routes,zend-framework2,zend-route,slash,Php,Routes,Zend Framework2,Zend Route,Slash,是否可以使用包含正斜杠的参数组合管线 配置: 'someroute' => array( 'type' => 'Zend\Mvc\Router\Http\Segment', 'options' => array( 'route' => 'someroute/:path', 'defaults' => array( 'controller
'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));
控制器:
'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
在视图中使用
rawurldecode()
当然可以解决这个问题。只需使用regex
路由类型:
'path' => array(
'type' => 'regex',
'options' => array(
'regex' => '/path(?<path>\/.*)',
'defaults' => array(
'controller' => 'explorer',
'action' => 'path',
),
'spec' => '/path%path%'
)
)
“路径”=>数组(
'type'=>'regex',
“选项”=>数组(
“regex'=>”/path(?\/.*),
“默认值”=>数组(
“控制器”=>“资源管理器”,
“操作”=>“路径”,
),
'spec'=>'/path%path%'
)
)
我遇到了类似的问题,因此我将使用Zend 3找到的解决方案发布到我的项目中
默认情况下,Symfony/Zend路由组件要求
参数与以下正则表达式匹配:[^/]+。这意味着
除了/,允许使用所有字符
您必须通过以下方式明确允许/成为占位符的一部分:
为其指定更宽松的正则表达式:
基本上,您可以允许所有字符,然后在操作中检查/trycatch/validate
参考:
这绝对是有意为之,而非所愿<在您的示例中,code>path被视为一个参数,因此得到urlencoded。其他一切都会带来安全风险,这是一个非常不令人满意的答案。我想以一种seo友好的方式映射一棵树。不可能动态生成子文件夹。例如:我有一个分类树,需要以下URI:
/taxonomy/term1/term1subterm1/term1subterm1subterm1/
/taxonomy/term1/term1/term1/term1subterm2/term1subterm1/
/taxonomy/term1/anoterhterm1/