php - FosRestbundle 强制错误消息的内容类型

标签 php http symfony http-status-codes fosrestbundle

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

示例请求 header :

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

当前响应 header (MethodNotAllowedHttpException):

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

最佳答案

如果 header 中的值未通过您的逻辑测试,您可以抛出错误。然后在你的 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() 获取任何 header 信息。

关于php - FosRestbundle 强制错误消息的内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20646503/

相关文章:

windows - 如何让 Windows 控制台\命令提示符显示颜色?

php - 从 Spaghetti 代码迁移到 Symfony 2

php - html5数字输入类型step属性乘以100

php - Symfony 2 Doctrine ODM 引用

java - 什么是 Java 等同于使用 https ://fcm. googleapis.com/fcm/send REST Api

node.js - 如何使用 express 在 Chrome 中获取 net::ERR CONTENT LENGTH MISMATCH

unit-testing - 使用 PHPUnit 进行测试时如何设置 Doctrine2 夹具?

php - SQL连接操作

php - 使用 Perl 进行 UI 开发的最佳方法

java - 我可以通过 HTTP 读取的响应大小是否有限制