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
...
});
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: