【问题标题】:Symfony2 Twig disable HTML RenderingSymfony2 Twig 禁用 HTML 渲染
【发布时间】:2014-03-26 05:11:14
【问题描述】:

如何在 twig 中关闭 html 响应的呈现?

我正在构建一个 RESTful API 并希望完全禁用 HTML 呈现。例如,如果我在没有 oAuth 访问令牌的情况下请求 /foo/bar,symfony2 应该使用 401 json 消息而不是 401 html 模板来响应。

问候

【问题讨论】:

  • 您在使用 FOSRestBundle 吗?恕我直言,如果您使用正在请求文本/html 的浏览器调用页面。您是否已经尝试过 curl 和 Accept: application/json

标签: html json rest symfony twig


【解决方案1】:

1- 使用 fosrestbundle。 2- 在您的 config.yml 文件中,将“defaults: {_format: json}”放入配置包中。 3- 在您的控制器中,只需抛出新的 UnauthorizedHttpException('optional custom message')。 它应该可以完成这项工作。

如果您不想使用此捆绑包: 在你的 routing.yml 中使用 _format: json。

【讨论】:

    【解决方案2】:

    只是不要调用 render 方法:return $this->render('FooBarBundle:Default:index.html.twig');

    您可以在控制器中调用:

    return new JsonResponse(array(
        'message' => 'Your message here'
    ), 401);
    

    【讨论】:

    • 我认为更合适的方式是实际返回 HTTP 错误代码:return new JsonResponse(array('message' => 'Your message here'), 401);
    • 嘿...感谢您的回复。是的,我正在使用 fosRestBundle 并且我只在我的控制器中调用 return array('foo' => $bar->getFoo()) 。因此,您更愿意扩展 twig 异常控制器并返回 JsonResponse?我认为这是解决问题的好方法。谢谢。
    • 我不知道您正在使用 FosRestBundle。您可以在这里找到更多信息:github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Resources/…
    • 是的,我在研究 bundle 时跳过了这个话题 :)
    猜你喜欢
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2013-09-23
    • 2014-02-21
    • 2017-01-26
    • 1970-01-01
    相关资源
    最近更新 更多