web-dev-qa-db-fra.com

Comment obtenir tous les paramètres GET sur Silex?

J'utilise Silex depuis un jour et j'ai la première question "stupide". Si j'ai:

$app->get('/cities/{city_id}.json', function(Request $request, $city_id) use($app) {
    ....
})
->bind('city')
->middleware($checkHash);

Je veux obtenir tous les paramètres (city_id) inclus dans le middleware:

$checkHash = function (Request $request) use ($app) {

    // not loading city_id, just the parameter after the ?
    $params = $request->query->all();

    ....
}

Alors, comment puis-je obtenir city_id (à la fois le nom du paramètre et sa valeur) à l'intérieur du middleware. Je vais avoir environ 30 actions, j'ai donc besoin de quelque chose utilisable et maintenable.

Qu'est-ce que je rate?

merci beaucoup!

Solution

Nous devons obtenir ces paramètres supplémentaires de $ request-> attributs

$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

Dans Request object, vous avez accès à plusieurs sacs de paramètres, en particulier:

  • $request->query - les paramètres GET
  • $request->request - les paramètres POST
  • $request->attributes - les attributs de la requête (inclut les paramètres analysés à partir du PATH_INFO)

$request->query contient uniquement les paramètres GET. city_id n'est pas un paramètre GET. Il s'agit d'un attribut analysé à partir de PATH_INFO.

Silex utilise plusieurs Composants Symfony . Les classes Request et Response font partie de la HttpFoundation. En savoir plus à ce sujet dans les documents Symfony:

64
Jakub Zalas