Как получить все параметры GET на Silex?
Я использую 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
...
});
Ответы
Ответ 1
В объекте Request у вас есть доступ к нескольким пакетам параметров, в частности:
-
$request->query
- параметры GET
-
$request->request
- параметры POST
-
$request->attributes
- атрибуты запроса (включая параметры, проанализированные из PATH_INFO)
$request->query
содержит только параметры GET. city_id
не является параметром GET. Это атрибут проанализирован из PATH_INFO.
Silex использует несколько Symfony Components. Классы запроса и ответа являются частью HttpFoundation. Подробнее об этом читайте в документах Symfony: