所以,我将解释这个问题,实际的问题是它是否是一个错误:
$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)