доступ по протоколу 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?

Author: G_V, 2016-04-26

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.

 5
Author: slax0r, 2016-04-26 07:52:00

Вы никогда не получите его как отдельный параметр, потому что это не параметр. Это необработанный контент, который вы должны расшифровать самостоятельно.

Протокол HTTP ничего не знает о JSON/XML/сериализации /чем угодно.

Он видит только текстовую строку.

Как сказал @Slaxor, вам придется получить от запроса и расшифровать его самостоятельно (могут быть пакеты, которые делают это за вас, но я о них не знаю).

 1
Author: Francesco Abeni, 2016-04-26 07:49:08