2017-05-19 66 views
0

我想顯示自定義錯誤頁,我想它,如果錯誤是不是「找不到網頁」或身份驗證問題(如爭取出現訪問用戶無權訪問的頁面)。我在Laravel 5.3的Handler.php中使用下面的代碼。 404部分工作時,認證部分不會(觸發此錯誤僅返回500頁)。我錯過了什麼?如何捕捉在Laravel的處理器授權錯誤渲染

public function render($request, Exception $e) 
{ 
    if ($e instanceof NotFoundHttpException || $e instanceof AuthorizationException || $e instanceof AuthenticationException) { 
     return parent::render($request, $e); 
    } 
    else { 
     return response()->view('errors.500', [ 
      'sentryID' => $this->sentryID, 
     ], 500); 
    } 
} 

回答

0

編輯:看起來你要處理所有的全局錯誤頁面。 Laravel使用symfony的異常處理程序來生成錯誤頁面文本和樣式。這可以在

vendor/symfony/debug/ExceptionHandler.php 

它在vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php使用中找到作爲

use Symfony\Component\Debug\ExceptionHandler as SymfonyExceptionHandler; 

天天看錯誤和異常可以在方法prepareResponse擴展到app/Exceptions/Handler.php,並作出適當的改變。

protected function prepareResponse($request, Exception $e) 
{ 
    if ($this->isHttpException($e)) { 
     return $this->toIlluminateResponse($this->renderHttpException($e), $e); 
    } else { 
     return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e); 
    } 
} 

您可以檢查此方法的基本工作在vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php

編輯完

你並不需要亂在此渲染方法。開箱即用的laravel搜索錯誤視圖並根據錯誤代碼渲染它們(如果可用)。因此,對於404和500,您可以創建以下兩個視圖並在其中進行自定義。

resources/views/errors/404.blade.php 
resources/views/errors/500.blade.php 

如果需要,此視圖會獲取您要顯示的異常,狀態和標題信息。他們被稱爲是這樣的

return response()->view("errors.{$status}", ['exception' => $e], $status, $e->getHeaders()); 

對於身份驗證檢查。當用戶未經身份驗證時,Laravel在app/Exceptions/Handler.php中調用unauthenticated方法。此代碼默認將用戶重定向到登錄頁面或顯示json響應。你可以在這裏做出改變。

protected function unauthenticated($request, AuthenticationException $exception) 
{ 
    if ($request->expectsJson()) { 
     return response()->json(['error' => 'Unauthenticated.'], 401); 
    } 
    return redirect()->guest('login'); 
} 
+0

感謝Sandeesh。這是有道理的,我實際上試圖實現的是使用自定義錯誤頁面(比如'500'自定義視圖)來處理任何不是認證或404錯誤的錯誤(例如{{$ x}},當$ x沒有定義) - 目前我的應用程序只是調用通用的'Whoops'頁面,我不知道如何更改,而不會弄亂供應商目錄中的文件 – user6122500

+0

@ user6122500我編輯了我的答案,您可以按照處理每個錯誤/異常。 – Sandeesh