web-dev-qa-db-ja.com

SilexですべてのGETパラメーターを取得するにはどうすればよいですか?

私は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

    ...

});
28
fesja

Request オブジェクトでは、特に複数のパラメーターバッグにアクセスできます。

  • $request->query-GETパラメーター
  • $request->request-POSTパラメーター
  • $request->attributes-要求属性(PATH_INFOから解析されたパラメーターを含む)

$request->queryにはGETパラメーターのみが含まれます。 city_idはGETパラメーターではありません。これは、PATH_INFOから解析された属性です。

Silexはいくつかの Symfonyコンポーネント を使用します。要求クラスと応答クラスは、HttpFoundationの一部です。 Symfonyのドキュメントから詳細をご覧ください。

64
Jakub Zalas