У меня есть CRUD-форма, сгенерированная через SensioGeneratorBundle, как described here. Это отлично работает.Возврат JSON на основе «Accept: application/json» с контроллера Symfony2
Однако, я хотел бы также вернуть JSON, а не ответы HTML, если заголовок HTTP «Accept» содержит только «application/json». Я работаю над прототипом службы JSON, и это поможет мне начать все начинать.
я понял, что я могу превратить свои объекты в строку JSON, как это:
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
$serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new
JsonEncoder()));
$json = $serializer->serialize($entity, 'json');
Однако, в конце, что $ содержит JSON строку, мои данные в формате JSON. Я хочу просто напрямую вывести это запрос, а не отображать обычное представление. Я попытался вернуть новый JsonResponse ($ json), но он перекодирует строку JSON, так что он заканчивается двойным кодированием.
Поэтому у меня есть два вопроса:
- Что такое «правильный» способ проверки заголовков HTTP запроса на? Я знаю, что могу просто посмотреть в $ _SERVER, но я думаю, что в Symfony2 может быть лучший способ сделать это.
- Что такое «правильный» способ вернуть строку JSON или перевести мои объекты в JSON, который возвращается прямо к запрашивающему, не отображая обычный вид.
Спасибо!
Это замечательно! Мне пришлось немного изменить его, потому что объекты все еще были дважды закодированы. Вот что я придумал: '$ serializer = new Сериализатор (массив (новый GetSetMethodNormalizer()), массив ('json' => новый JsonEncoder());' '$ response = $ serializer-> serialize (array ('success' => true, 'data' => array ('entity' => $ entities,)), 'json'); ' ' $ result = new Response ($ response, 200, array ('Content -Type '=>' application/json ')); ' – Josh
Итак, я не могу понять, как получить разрыв строки в комментариях. Вам нужно будет переформатировать код в моем предыдущем комментарии ... извините. Кроме того, мне пришлось изменить $ request на $ this-> getRequest(). – Josh
К сожалению, я взял этот фрагмент из своего кода, и я делаю кодировку несколько иначе, чем вы. Прокомментируйте только теги кода поддержки, ничего больше;) Я буду запрашивать запросы, я отредактирую ответ –