FOSRestBundle以格式html强制一个路由

时间:2013-08-24 02:01:52

标签: symfony symfony-2.3 fosrestbundle

可以确保只有一条路线只能以html格式提供吗?

在配置中我设置了html和json,但是对于只有一条路线,我希望没有使用json。

你能做到吗?

2 个答案:

答案 0 :(得分:2)

我没有试过这个,因为我在手机上,但是你看过这样的路线尝试这样的事情:

my-awesome-route:
  pattern:  /hello/{fist_name}/{last_name}.{_format}
  defaults: { _controller: AcmeHelloBundle:Default:index, _format:html}
requirements:
  _format: html

答案 1 :(得分:1)

您可以在控制器操作中的视图上调用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);
    }
}