に一致しないパラメータ値の原因で、私はそれはバグだ場合、問題と実際の質問がされるについて説明します:symfonyの3.4 /ルーティング: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');
これは、「例外を与えます以下のようなパスから%2F(URLエンコードされたスラッシュ)を削除した場合、 "2Fblax/fooの/ someDataが%で"」
が見つかりませ路線:
$parameters = $matcher->match('/foo/somedatablax');
その後、すべてが$パラメータ、正常に動作しません:
array (size=2)
'name' => string 'somedatablax' (length=12)
'_route' => string 'route_name' (length=10)
ので、さらに/foo/somedata/{name}
するURLパターンを設定GOING:
$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');
これが返されます:パターンに一致するとき、URLエンコードされたスラッシュが通常のスラッシュとして扱われたことを意味し
array (size=2)
'name' => string 'blax' (length=4)
'_route' => string 'route_name' (length=10)
ました間違っているようです(URLエンコードが存在する理由の1つではありません)
調査を行い、それがなぜこのように機能するのかを知ることができました。(固定するのは簡単ではありません)
これはバグですか、それとも私のロジックに流れがありますか?明らかにバグのように見えるが、それは長い間そこにあるように思える。(当初からかもしれない?)
また、実際にはそうではなく、この特定の問題の解決策になりますが、まだ関連しています):symfony4とsymfony2と同じです。
明確にする:symfonyのルータは、ルートを照合する前にrawurldecodeを行います'requirements = {" token = "。+"} ')は、提供されたリンクに記載されているようにURLの最後のパラメータにしか適用できませんので、普遍的な解決策ではありません – user2227791