国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Laravel 5.8 ??? ?? ??? / 錯(cuò)誤

錯(cuò)誤

錯(cuò)誤


錯(cuò)誤處理

介紹

當(dāng)你啟動(dòng)一個(gè)新的 Laravel 項(xiàng)目時(shí),錯(cuò)誤及異常處理是已為你配置好了的。 App\Exceptions\Handler 類負(fù)責(zé)記錄應(yīng)用程序觸發(fā)的所有異常并呈現(xiàn)給用戶。在本文檔中,我們將深入探討這個(gè)類。

配置

你的 config/app.php 配置文件中的 debug 選項(xiàng)決定了對于一個(gè)錯(cuò)誤實(shí)際上將顯示多少信息給用戶。默認(rèn)情況下,該選項(xiàng)的設(shè)置將遵照存儲(chǔ)在 .env 文件中的 APP_DEBUG 環(huán)境變量的值。

對于本地開發(fā),你應(yīng)該將 APP_DEBUG 環(huán)境變量的值設(shè)置為 true 。在生產(chǎn)環(huán)境中,該值應(yīng)始終為 false 。如果在生產(chǎn)中將該值設(shè)置為 true ,則可能會(huì)將敏感配置值暴露給應(yīng)用程序的終端用戶。

異常處理器

Report 方法

所有異常都是由 App\Exceptions\Handler 類處理的。這個(gè)類包含兩個(gè)方法: reportrender 。我們將詳細(xì)剖析這些方法。 report 方法用于記錄異常或?qū)⑺鼈儼l(fā)送給如 Bugsnag 或 Sentry 等外部服務(wù)。默認(rèn)情況下, report 方法將異常傳遞給記錄異常的基類。不過,你可以任何自己喜歡的方式來記錄異常。

例如,如果你需要以不同方式報(bào)告不同類型的異常,則可以使用 PHP 的 instanceof 比較運(yùn)算符:

/**
 * 報(bào)告或記錄異常
 *
 * 此處是發(fā)送異常給 Sentry、Bugsnag 等外部服務(wù)的好位置。
 *
 * @param  \Exception  $exception
 * @return void
 */
 public function report(Exception $exception){  
   if ($exception instanceof CustomException) {     
      //    
    }   
   parent::report($exception);
 }

{tip} 不要在 report 方法中進(jìn)行太多的 instanceof 檢查,而應(yīng)考慮使用 可報(bào)告異常(Reportable exception) 。

全局日志

在正常情況下, Laravel 會(huì)自動(dòng)將當(dāng)前用戶的 ID 作為數(shù)據(jù)添加到每一條異常日志中。 你可以在通過重寫 App\Exceptions\Handler 類中的 context 方法來定義你的全局環(huán)境變量。 之后,這個(gè)變量將包含在每一條異常日志中:

/**
 * 定義默認(rèn)的環(huán)境變量
 *
 * @return array
 */
 protected function context(){  
   return array_merge(parent::context(), [    
       'foo' => 'bar',   
      ]);
   }

report 輔助函數(shù)

有時(shí)你可能需要報(bào)告異常,但又不希望終止當(dāng)前請求的處理。 report 輔助函數(shù)允許你使用異常處理器的 report 方法在不顯示錯(cuò)誤頁面的情況下快速報(bào)告異常:

public function isValid($value){  
  try {       
   // 驗(yàn)證值...  
   } 
    catch (Exception $e) {  
        report($e);   
        return false;   
      }
   }

按類型忽略異常

異常處理器的 $dontReport 屬性包含一組不會(huì)被記錄的異常類型。例如,由 404 錯(cuò)誤導(dǎo)致的異常以及其他幾種類型的錯(cuò)誤不會(huì)寫入日志文件。你可以根據(jù)需要添加其他異常類型到此數(shù)組中:

/**
 * 不應(yīng)被報(bào)告的異常類型清單。
 *
 * @var array
 */protected $dontReport = [
    \Illuminate\Auth\AuthenticationException::class,
    \Illuminate\Auth\Access\AuthorizationException::class,
    \Symfony\Component\HttpKernel\Exception\HttpException::class,
    \Illuminate\Database\Eloquent\ModelNotFoundException::class,
    \Illuminate\Validation\ValidationException::class,];

Render 方法

render 方法負(fù)責(zé)將給定的異常轉(zhuǎn)換為將被發(fā)送回瀏覽器的 HTTP 響應(yīng)。默認(rèn)情況下,異常將傳遞給為你生成響應(yīng)的基類。不過,你可以按自己意愿檢查異常類型或返回自己的自定義響應(yīng):

/**
 * 將異常轉(zhuǎn)換為 HTTP 響應(yīng)。
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $exception
 * @return \Illuminate\Http\Response
 */
 public function render($request, Exception $exception){ 
    if ($exception instanceof CustomException) {     
       return response()->view('errors.custom', [], 500);  
      }  
     return parent::render($request, $exception);
   }

Reportable & Renderable 異常

除了在異常處理器的 reportrender 方法中檢查異常類型,你還可以直接在自定義異常上定義 reportrender 方法。當(dāng)定義了這些方法時(shí),它們會(huì)被框架自動(dòng)調(diào)用:

<?php
  namespace App\Exceptions;use Exception;
  class RenderException extends Exception{   
        /**
     * 報(bào)告異常
     *
     * @return void
     */   
   public function report()  
     {    
       //   
      }    
     /**
     * 轉(zhuǎn)換異常為 HTTP 響應(yīng)
     *
     * @param  \Illuminate\Http\Request
     * @return \Illuminate\Http\Response
     */  
    public function render($request) 
       {     
          return response(...); 
        }
     }

{tip} 你可以聲明 report 方法和必要參數(shù),它們將通過 Laravel 的 服務(wù)容器 自動(dòng)注入方法中

HTTP 異常

一些異常用于描述產(chǎn)生自服務(wù)器的 HTTP 錯(cuò)誤代碼。例如,「頁面未找到」錯(cuò)誤 (404),  「未經(jīng)授權(quán)的錯(cuò)誤」(401) ,甚至可以是開發(fā)人員引起的 500 錯(cuò)誤。 你可以使用 abort 輔助函數(shù)從應(yīng)用程序的任何地方生成這樣的響應(yīng):

abort(404);

輔助函數(shù) abort 會(huì)立即引發(fā)一個(gè)由異常處理器渲染的異常。你還可選擇性地提供響應(yīng)文本:

abort(403, 'Unauthorized action.');

自定義 HTTP 錯(cuò)誤頁面

Laravel 可以輕松顯示各種 HTTP 狀態(tài)代碼的自定義錯(cuò)誤頁面。例如,如果你希望自定義 404 HTTP 狀態(tài)碼的錯(cuò)誤頁面,可以創(chuàng)建一個(gè) resources/views/errors/404.blade.php 視圖文件。該文件將被用于你的應(yīng)用程序產(chǎn)生的所有 404 錯(cuò)誤。此目錄中的視圖文件的命名應(yīng)匹配它們對應(yīng)的 HTTP 狀態(tài)碼。由 abort 函數(shù)引發(fā)的 HttpException 實(shí)例將作為 $exception 變量傳遞給視圖:

<h2>{{ $exception->getMessage() }}</h2>

你可以使用 vendor:publish Artisan 命令來定義錯(cuò)誤模板頁面。模板頁面生成后,就可以自定義模板頁面的內(nèi)容:

php artisan vendor:publish --tag=laravel-errors
本文章首發(fā)在 LearnKu.com 網(wǎng)站上。