Symfony FOSRestBundle强制一条html格式的路由

Symfony FOSRestBundle强制一条html格式的路由,symfony,symfony-2.3,fosrestbundle,Symfony,Symfony 2.3,Fosrestbundle,是否可以确保只有一条路由仅以html格式提供 在配置中,我设置了html和json,但对于一个路由,我希望json没有被使用 你能做些什么吗?我没有试过这个,因为我在用手机,但你有没有考虑过只为那一条路线尝试这样的方法: my-awesome-route: pattern: /hello/{fist_name}/{last_name}.{_format} defaults: { _controller: AcmeHelloBundle:Default:index, _format:ht

是否可以确保只有一条路由仅以html格式提供

在配置中,我设置了html和json,但对于一个路由,我希望json没有被使用


你能做些什么吗?

我没有试过这个,因为我在用手机,但你有没有考虑过只为那一条路线尝试这样的方法:

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

我没有像在手机上那样尝试过,但你有没有考虑过仅仅为了那一条路线而尝试类似的东西:

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

非常感谢。这是一个很好的系统,但这样就排除了路由系统FOSRestBundle,您必须手动声明任何路由!这将是很好的,你可以不排除路由系统,捆绑!非常感谢。这是一个很好的系统,但这样就排除了路由系统FOSRestBundle,您必须手动声明任何路由!这将是很好的,你可以不排除路由系统,捆绑!