违反Symfony2路由要求不会导致具有正确内容类型的响应

时间:2012-01-27 15:17:24

标签: php routing annotations symfony

我目前正在Symfony2应用程序中编写REST服务。这(大致)是我的一个控制器的样子:

/**
 * @Route("/account", defaults={"_format" = "json"})
 */
class AccountController extends APIController
{
    /**
     * @Route("/")
     * @Method("get")
     */
    public function listAction()
    {
        // process something here and return JSON-encoded response
    }
}

这很好用 - 即如果弹出一些问题并抛出HTTPException,则使用来自Symfony2的TwigBundle的正确error.json.twig并将HTTP错误呈现为JSON。

但是,违反路由要求的情况并非如此,@Method("get")就是一个。例如,如果我针对上述URL抛出POSTPUT,我仍然会返回正确的HTTP状态代码,但使用错误的内容类型(text / html而不是application / json)进行渲染

我非常有兴趣让完整的API返回JSON响应,而不是别的 - 问题是:我如何实现这一点?我是否必须完全省略路由要求并自行检查要求(然后最终抛出我自己的HTTPException)?

2 个答案:

答案 0 :(得分:0)

您可能应该将其作为错误/愿望归档于github page。 (我试图找到负责任的PHP文件,但HttpKernel组件并不完全适合胆小的人。)

答案 1 :(得分:0)

您可以尝试在注释上使用yml路由。对我来说很好。抱歉,无法提供更有帮助的回复。