2012-06-11 4 views
0

Я работаю над REST API с помощью FOSRestBundle, и я хотел бы иметь возможность использовать тот же URL для возврата HTML и JSON в зависимости от заголовок запроса Accept; т. е. если вы вызываете URL-адрес непосредственно из браузера (Accept : text/html и т. д.), HTML возвращается из файла twig, если вы делаете запрос AJAX (Accept : application/JSON и т. д.), JSON возвращается с использованием FOSRestBundle.Использование заголовков HTTP-запросов с маршрутизацией Symfony для возврата другого контента (html/json)

В настоящее время я могу заставить это работать, бросив небольшую инструкцию if в верхней части каждой функции, чтобы проверить заголовок запроса принятия, если он просит HTML, он возвращает файл twig, если он запрашивает JSON, он обращается к службе ,

ответ

0

Область запроса не существует при запуске в режиме командной строки, мне пришлось удалить запрос от каждого конструктора, и проблема исчезла.

1

Вы должны скорее отправить заголовок «Принять» с вашими запросами. Прочитайте content negotiation (“Accept” HTTP header) based routing in symfony2.0 и Format listener.

+0

Спасибо за ответ, без проблем с использованием заголовка accept, но я до сих пор не могу понять, как перенаправить на другой контроллер на основе заголовка. В настоящее время я использую один контроллер, чтобы определить тип, затем возвращая шаблон ветки или попав в мой сервис и возвращая JSON. Он работает, но это означает повторение одного и того же оператора if внутри каждой отдельной службы, что на самом деле не идеально. – greg