FOSRestBundle форсирует один маршрут в формате html

Можно ли сделать так, чтобы только один маршрут был доступен только в формате html?

В конфигурации я указал html и json, но только для одного маршрута я бы хотел, чтобы json не использовался.

Ты можешь сделать?


person Lughino    schedule 24.08.2013    source источник


Ответы (2)


Я не пробовал это, так как я на мобильном телефоне, но вы пробовали что-то подобное только для этого одного маршрута:

my-awesome-route:
  pattern:  /hello/{fist_name}/{last_name}.{_format}
  defaults: { _controller: AcmeHelloBundle:Default:index, _format:html}
requirements:
  _format: html
person kratos    schedule 28.08.2013
comment
Благодарю вас! Это отличная система, но таким образом исключается система маршрутов FOSRestBundle и любой маршрут приходится объявлять вручную! Было бы неплохо, если бы можно было обойтись без исключения системы маршрутизации, связки! - person Lughino; 28.08.2013

Вы можете вызвать 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);
    }
}
person gblock    schedule 09.10.2015