доступ по протоколу HTTP ПОМЕЩАЕТ данные в Symfony2
Через HTTP PUT я отправляю следующий json на свой веб-сервис, проверенный return new Response($request->getContent());
:
{"company_id":13}
В моем веб-сервисе я пытаюсь извлечь данные по тегу из запроса:
var_dump("COMPANY ID ".$request->request->getInt('company_id')); //returns 0
Я также пробовал:
//the 2 below should only work on GET from what I read
var_dump("COMPANY ID ".$request->get('company_id')); //returns nothing
var_dump("COMPANY ID ".$request->query->getInt('company_id')); //returns 0
В книге symfony2 упоминается только о том, как получить данные из GET и POST, как мне получить данные из запроса PUT?
2 answers
Вы получаете его от $request->getContent()
, просто json_decode
, и вы должны получить объект, чтобы затем получить к нему доступ. Пример:
$data = json_decode($request->getContent());
var_dump("COMPANY ID " . $data->company_id);
Отредактируйте, чтобы добавить немного больше объяснений.
Основы Http Symfony get
метод в основном является просто "псевдонимом" для $request->attributes->get
, $request->query->get
, и $request->request->get
, поэтому, если один вернет 0 или false, или что-то еще, вполне вероятно, что другой тоже вернет.
Поскольку HTTP PUT отправляет данные в виде тела, объект запроса не пытается декодировать их каким-либо образом, потому что это может были в нескольких разных форматах (JSON, XML, нестандартные,...). Если вы хотите получить к нему доступ с помощью вызова метода get
, вам придется расшифровать его вручную, а затем добавить в его свойства request
или query
.
Вы никогда не получите его как отдельный параметр, потому что это не параметр. Это необработанный контент, который вы должны расшифровать самостоятельно.
Протокол HTTP ничего не знает о JSON/XML/сериализации /чем угодно.
Он видит только текстовую строку.
Как сказал @Slaxor, вам придется получить от запроса и расшифровать его самостоятельно (могут быть пакеты, которые делают это за вас, но я о них не знаю).