小编use*_*791的帖子

Symfony 3.4/routing:参数值中的 URL 编码“/”导致与路由不匹配

所以,我将解释这个问题,实际的问题是它是否是一个错误:

$routes = new RouteCollection();
$context = new RequestContext('/');
$matcher = new UrlMatcher($routes, $context);

$route = new Route('/foo/{name}');
$routes->add('route_name', $route);
$parameters = $matcher->match('/foo/somedata%2Fblax');
Run Code Online (Sandbox Code Playgroud)

这给出了一个例外“没有为“/foo/somedata%2Fblax”找到路由”

如果从路径中删除 %2F(url 编码的斜杠),例如:

$parameters = $matcher->match('/foo/somedatablax');
Run Code Online (Sandbox Code Playgroud)

然后一切正常,$parameters:

array (size=2)
  'name' => string 'somedatablax' (length=12)
  '_route' => string 'route_name' (length=10)
Run Code Online (Sandbox Code Playgroud)

因此,进一步将 url 模式设置为/foo/somedata/{name}

 $routes = new RouteCollection();
 $context = new RequestContext('/');
 $matcher = new UrlMatcher($routes, $context);

 $route = new Route('/foo/somedata/{name}');   
 $routes->add('route_name', $route);
 $parameters = $matcher->match('/foo/somedata%2Fblax');
Run Code Online (Sandbox Code Playgroud)

这将返回:

array (size=2)
  'name' => string 'blax' (length=4)
  '_route' => …
Run Code Online (Sandbox Code Playgroud)

routing symfony

6
推荐指数
1
解决办法
812
查看次数

标签 统计

routing ×1

symfony ×1