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


Violation of Symfony2 routing requirement does not lead to a response with the correct content type

我目前正在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)?

您可能应该在他们的github页面上将其作为bug/愿望进行归档。(我试图找到负责的PHP文件,但HttpKernel组件并不完全适合胆小的人。)

您可以尝试在注释上使用yml路由。对我来说效果很好。对不起,不能给出更有用的回应了。