FOSRestBundle форсирует один маршрут в формате html
Можно ли сделать так, чтобы только один маршрут был доступен только в формате html?
В конфигурации я установил html и json, но только для одного маршрута мне бы хотелось, чтобы json не использовался.
Ты можешь сделать?
2 ответа
Решение
Я не пробовал это, поскольку я нахожусь на сотовом телефоне, но вы смотрели на то, чтобы попробовать что-то подобное только для этого одного маршрута:
my-awesome-route:
pattern: /hello/{fist_name}/{last_name}.{_format}
defaults: { _controller: AcmeHelloBundle:Default:index, _format:html}
requirements:
_format: html
Ты можешь позвонить setFormat('html')
на вид в вашем контроллере действий.
Например, чтобы только визуализировать и вернуть шаблон:
class AcmeController extends FOSRestController
{
public function getAction()
{
// ...
$templateData = [
'some' => $vars,
];
$view = $this->view(null, 200)
->setFormat('html')
->setTemplate("AcmeBundle:Tpl:some.html.twig")
->setTemplateData($templateData);
return $this->handleView($view);
}
}
Но тогда обработчик представления всегда будет пытаться отобразить шаблон. Если вам не нужно выполнять рендеринг, потому что у вас уже есть ваш HTML, просто верните новый ответ Symfony с правильными заголовками:
class AcmeController extends FOSRestController
{
public function getAction()
{
// you already have $html
$headers = ['Content-Type' => 'text/html; charset=UTF-8'];
return \Symfony\Component\HttpFoundation\Response::create($html, 200, $headers);
}
}