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);
    }
}
Другие вопросы по тегам