我目前正在 App/Exceptions/Handler.php 中集成一些逻辑。我希望能够访问 $exception 变量上的 HTTP 状态代码:
public function report(Throwable $exception)
{
dd($exception->statusCode);
parent::report($exception);
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
ErrorException 未定义的属性: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: {?}
}
Run Code Online (Sandbox Code Playgroud)
我如何访问statusCode?
如果您查看源代码,Symfony\Component\HttpKernel\Exception\NotFoundHttpException您会发现它扩展了Symfony\Component\HttpKernel\Exception\HttpException如果您查看类的声明,您将看到它$statusCode是私有的,但它有一个 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;
}
//...
}
Run Code Online (Sandbox Code Playgroud)
因此,您只需要$exception->getStatusCode()检索状态代码(在您的情况下为 404),尽管您应该进行检查以确保您的 throwable 实现了,HttpExceptionInterface因为情况可能并非总是如此,因此该方法将不存在,您会得到致命错误
if ($exception instanceof \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface) {
$code = $exception->getStatusCode();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6574 次 |
| 最近记录: |