Подтвердить что ты не робот

Как получить все параметры 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

    ...

});
4b9b3361

Ответ 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: