亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從 Laravel 中拋出的異常中獲取 HTTP 狀態代碼?

如何從 Laravel 中拋出的異常中獲取 HTTP 狀態代碼?

PHP
喵喵時光機 2023-09-22 14:38:17
我目前正在 App/Exceptions/Handler.php 中集成一些邏輯。我希望能夠訪問 $exception 變量上的 HTTP 狀態代碼: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?
查看完整描述

3 回答

?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

如果你查看源代碼,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;

    }

    //...

}


因此,您只需要$exception->getStatusCode()檢索狀態代碼(在您的情況下為 404),盡管您應該進行檢查以確保您的 throwable 實現了,因為情況可能HttpExceptionInterface并不總是如此,因此該方法將不存在,您會得到致命錯誤


if ($exception instanceof \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface) {

  $code = $exception->getStatusCode();

}


查看完整回答
反對 回復 2023-09-22
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

我的做法如下,
由于這個問題相對較新,我推測您正在起訴Laravel版本7或8。根據 的文檔Error Handling,正確的頁面渲染方法現在如下

public function render($request, Throwable $exception)

{

? ? if ($exception instanceof CustomException) {

? ? return response()->view('errors.custom', [], 500);

? ? }


? ? return parent::render($request, $exception);

}

為了使用自定義錯誤視圖,您必須告訴您拋出的實例Laravel類型。要覆蓋內部錯誤處理,您需要捕獲作為 HTTP 異常拋出的異常。對于這些版本,正確的類是.?所以,Exception$exceptionSymfony\Component\HttpKernel\Exception\


  1. use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
    在你的頂部引入處理類app\Exceptions\Handler.php

  2. 根據您的場景將默認的 render() 方法修改為如下所示,


use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;

? ? //

? ? //

public function render($request, Throwable $exception)

{

? ? // return parent::render($request, $exception);

? ? if ($exception instanceof HttpExceptionInterface) {

? ? ? ? if (env('APP_ENV') === 'production' && $exception->getStatusCode() == 404) {

? ? ? ? ? ? return response()->view('errors.404', [], 404);

? ? ? ? }

? ? ? ? if (env('APP_ENV') === 'production' && $exception->getStatusCode() == 500) {

? ? ? ? ? ? return response()->view('errors.500', [], 500);

? ? ? ? }

? ? }

? ? return parent::render($request, $exception);

}


查看完整回答
反對 回復 2023-09-22
?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

嘗試$exception->getCode()

查看完整回答
反對 回復 2023-09-22
  • 3 回答
  • 0 關注
  • 240 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號