私は1日Silexを使用していますが、最初の「愚かな」質問があります。私が持っている場合:
$app->get('/cities/{city_id}.json', function(Request $request, $city_id) use($app) {
....
})
->bind('city')
->middleware($checkHash);
ミドルウェアに含まれるすべてのパラメーター(city_id)を取得したい:
$checkHash = function (Request $request) use ($app) {
// not loading city_id, just the parameter after the ?
$params = $request->query->all();
....
}
したがって、ミドルウェア内でcity_id(パラメーター名とその値の両方)を取得するにはどうすればよいですか。 30のアクションがあるので、使いやすく保守可能なものが必要です。
私は何が欠けていますか?
どうもありがとう!
ソリューション
$ request-> attributesの追加パラメーターを取得する必要があります
$checkHash = function (Request $request) use ($app) {
// GET params
$params = $request->query->all();
// Params which are on the PATH_INFO
foreach ( $request->attributes as $key => $val )
{
// on the attributes ParamaterBag there are other parameters
// which start with a _parametername. We don't want them.
if ( strpos($key, '_') != 0 )
{
$params[ $key ] = $val;
}
}
// now we have all the parameters of the url on $params
...
});
Request オブジェクトでは、特に複数のパラメーターバッグにアクセスできます。
$request->query
-GETパラメーター$request->request
-POSTパラメーター$request->attributes
-要求属性(PATH_INFOから解析されたパラメーターを含む)$request->query
にはGETパラメーターのみが含まれます。 city_id
はGETパラメーターではありません。これは、PATH_INFOから解析された属性です。
Silexはいくつかの Symfonyコンポーネント を使用します。要求クラスと応答クラスは、HttpFoundationの一部です。 Symfonyのドキュメントから詳細をご覧ください。