当用户无权执行任何操作时,我在控制器中抛出异常,我创建了一个自定义异常类来执行此操作。我也在使用这个软件包: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);
}
答案 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应该启动并且应该使用你提供的状态代码。