Как мне получить код состояния HTTP из исключения, выданного в Laravel? - PullRequest
3 голосов
/ 07 августа 2020

В настоящее время я интегрирую некоторые logi c в приложение / исключения / обработчик. php. Я хотел бы иметь доступ к коду состояния HTTP в переменной $ exception:

public function report(Throwable $exception)
{
    dd($exception->statusCode);
    parent::report($exception);
}

Однако я получаю следующую ошибку:

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: {▶}
}

Как мне получить доступ к statusCode?

Ответы [ 2 ]

3 голосов
/ 07 августа 2020

Если вы посмотрите исходный код Symfony\Component\HttpKernel\Exception\NotFoundHttpException, вы обнаружите, что он расширяет Symfony\Component\HttpKernel\Exception\HttpException, если вы посмотрите на объявление класса, вы увидите, что $ statusCode является частным, но у него есть метод получения

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, потому что это может быть не всегда, и поэтому метод не будет существовать, и вы получите фатальную ошибку

if ($exception instanceof \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface) {
  $code = $exception->getStatusCode();
}
0 голосов
/ 07 августа 2020

Проверьте документы здесь https://www.php.net/manual/en/exception.getcode.php
Попробуйте $exception->getCode()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...