FosRestbundle强制内容类型为错误消息

时间:2013-12-17 23:06:47

标签: php http symfony http-status-codes fosrestbundle

我正在为中所有个http错误消息的强制 content-typeapplication/json寻找一个简单,愚蠢的解决方案(如MethodNotAllowedHttpException等)。

示例请求标头:

Content-Type: application/x-www-form-urlencoded 
Accept: */*

当前响应标题MethodNotAllowedHttpException):

Content-Type: text/html; charset=UTF-8 

1 个答案:

答案 0 :(得分:1)

如果标头中的值未通过逻辑测试,则可以抛出错误。然后在你的catch语句中,返回一个json响应。像这样(未经测试的代码)

use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;

// .....

public function myAction(Request $request){

    try{
        // ...
        $cType = $request->headers->get('Content-Type');
        // logic for testing if the content type is allowed
        if(!in_array($cType,$allowedArray)){
            throw new MethodNotAllowedHttpException();
        }
        // .....

    }catch(\Exception $e){
        if(get_class($e) == "MethodNotAllowedHttpException"){
            $data = array("success"=>false,"message"=>"Method not allowed")
            return new JsonResponse($data);
        }
    }
}

这样您就可以通过不同的方式处理不同的异常。我不确定您是否要使用内容类型来确定是否抛出异常,但是您可以使用$request->headers->get()

获取任何标题信息