gpt4 book ai didi

php - 如何从 Laravel 中抛出的异常中获取 HTTP 状态码?

转载 作者:行者123 更新时间:2023-12-03 13:39:01 26 4
gpt4 key购买 nike

我目前正在 App/Exceptions/Handler.php 中集成一些逻辑。我希望能够访问 $exception 变量上的 HTTP 状态代码:

public function report(Throwable $exception)
{
dd($exception->statusCode);
parent::report($exception);
}
但是我收到以下错误:

ErrorException Undefined property: ErrorException::$statusCode


当我 dd($exception)我得到以下信息:
Symfony\Component\HttpKernel\Exception\NotFoundHttpException {#1214 ▼
-statusCode: 404
-headers: []
#message: ""
#code: 0
#file: "C:\Users\CEX\Documents\GitHub\unified\vendor\laravel\framework\src\Illuminate\Routing\AbstractRouteCollection.php"
#line: 43
trace: {▶}
}
如何访问 statusCode ?

最佳答案

如果你看Symfony\Component\HttpKernel\Exception\NotFoundHttpException的源代码你会发现它扩展了 Symfony\Component\HttpKernel\Exception\HttpException如果你查看类的声明,你会看到 $statusCode是私有(private)的,但它有一个 getter 方法

class HttpException extends \RuntimeException implements HttpExceptionInterface
{
private $statusCode;
private $headers;

public function __construct(int $statusCode, string $message = null, \Throwable $previous = null, array $headers = [], ?int $code = 0)
{
$this->statusCode = $statusCode;
$this->headers = $headers;

parent::__construct($message, $code, $previous);
}

public function getStatusCode()
{
return $this->statusCode;
}
//...
}

因此,您只需执行 $exception->getStatusCode()检索状态代码(在您的情况下为 404),但您应该检查以确保您的 throwable 实现了 HttpExceptionInterface因为情况可能并非总是如此,因此该方法将不存在,您将收到 fatal error
if ($exception instanceof \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface) {
$code = $exception->getStatusCode();
}

关于php - 如何从 Laravel 中抛出的异常中获取 HTTP 状态码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63297586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com