Php FOSRestBundle:显示我的自定义异常消息

Php FOSRestBundle:显示我的自定义异常消息,php,symfony,exception,fosrestbundle,Php,Symfony,Exception,Fosrestbundle,我试图在FOSRestBundle中添加异常的自定义控件,但它似乎忽略了我的自定义消息(响应的状态代码为ok) 我有: throw new HttpException(404, "User {$id} not found"); 但是得到这个json响应: { "error": { "code": 404, "message": "Not Found" } } 因此,我找不到在上显示自定义消息的方法:如果您不喜欢默认的异常结构,可以提供自己的实现。 class Exce

我试图在FOSRestBundle中添加异常的自定义控件,但它似乎忽略了我的自定义消息(响应的状态代码为ok)

我有:

throw new HttpException(404, "User {$id} not found");
但是得到这个json响应:

{
  "error": {
    "code": 404,
    "message": "Not Found"
  }
}
因此,我找不到在上显示自定义消息的方法:
如果您不喜欢默认的异常结构,可以提供自己的实现。

class ExceptionWrapperHandler implements ExceptionWrapperHandlerInterface
{
    /**
     * @param array $data
     *
     * @return array
     */
    public function wrap($data)
    {
        // we get the original exception
        $exception = $data['exception'];

        // some operations
        // ...

        // return the array
        return array(
            'code'    => $code,
            'message' => $message,
            'value'   => $value
        );
    }
}


您还可以使用以下配置引发自己的异常:

fos_rest:
    exception:
        codes:
            'My\Custom\NotFound\Exception404': 404
        messages:
            'My\Custom\NotFound\Exception404': true

在您自己的异常类中提供一条自定义消息,该消息应按预期工作。

要显示自定义异常消息(只需将其显示在app/config/config.yml中):


另一个简单的解决方案是,在fos_rest配置中设置
debug
标志,如下所示:

fos_rest:
    // ...
    exception:
        // ...
        debug: true

这将显示所有异常的实际异常消息。显然,这可能会带来安全风险,因此请谨慎使用。

它不起作用,我不使用表单或视图,我总是返回带有数据的JsonResponse。也许这个解决方案在没有视图的情况下不起作用?这确实与视图有关。为什么不使用视图?这不适合你的需要?因为FOSRestBundle将JSON响应作为视图处理。我的api只是JSON,所以我将输入数据作为简单参数(而不是
FormType
)处理,并始终返回
返回新的JsonResponse($array_data),当异常发生时,我抛出新的HttpException(404,“用户{$id}未找到”)
我急于部署,所以让它更直观。如果需要使用FOSRest,您只能返回JSON。您应该查看文档(和视图层)。它可以做你想做的:)。但是无论如何,这个解决方案应该可以工作,FOSRest使用它来处理异常。不做任何事=(可能这个功能已经被删除,但是文档还没有更新?我尝试了这个方法,但仍然在prod环境中获得了异常的默认http消息(例如对400的错误请求),无论是使用我的自定义异常类还是Symfony的。它在开发中都可以正常工作。我是否错过了要执行的任何其他配置?请尝试在config.yml的twig部分下设置exception\u controller:'FOS\RestBundle\controller\ExceptionController::showAction'谢谢,在
twig
部分设置此选项。出于某种原因,文档umentation说它可以在
fos\u rest.exception
部分中设置,但它实际上不接受它。就我个人而言,我添加以删除var/cache目录使其工作!谢谢!就我个人而言,我添加以删除var/cache目录使其工作!谢谢!
fos_rest:
    exception:
         messages:
            Symfony\Component\HttpKernel\Exception\HttpException: true
fos_rest:
    // ...
    exception:
        // ...
        debug: true