Laravel Exception是401,但响应头是500

时间:2017-11-27 16:33:42

标签: php laravel api

当用户无权执行任何操作时,我在控制器中抛出异常,我创建了一个自定义异常类来执行此操作。我也在使用这个软件包:https://github.com/esbenp/heimdal以更好的格式格式化我的响应。 但是,当我将我的例外中的状态代码设置为401时,我的回答是500。

<?php

namespace App\Acl\Exceptions;

use Exception;
use Throwable;
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;

class UserUnauthorizedException extends Exception
{
    public function __construct($message = "", $code = 0, \Throwable $previous = null)
    {
        parent::__construct('you are not authorized to perform this action', 401, $previous);
    }

1 个答案:

答案 0 :(得分:0)

这是由您使用的库引起的。您可以自己创建问题或提交PR,否则您可能需要切换到替代方案。

作为参考,这是设置响应状态代码的位置:https://github.com/esbenp/heimdal/blob/master/src/Formatters/ExceptionFormatter.php#L13

编辑:基本上,您必须扩展已经由库中的HttpExceptionFormatter处理的正确HttpException,或者更新配置,指定应该由它处理您的Exception。配置看起来像这样:

return [
    'formatters' => [
        \App\Acl\Exceptions\UserUnauthorizedException::class => \Optimus\Heimdal\Formatters\HttpExceptionFormatter::class,
        \Exception::class => \Optimus\Heimdal\Formatters\ExceptionFormatter::class,
    ]
];

这将为您的异常(以及从它继承的每个类)使用HttpExceptionFormatter,而所有其他异常由通用ExceptionFormatter处理。

默认配置可以在项目的自述文件中找到:https://github.com/esbenp/heimdal#formatters

从这里你也可以收集,如果你扩展Symfony\Component\HttpKernel\Exception\HttpException HttpExceptionFormatter应该启动并且应该使用你提供的状态代码。