編輯:看起來你要處理所有的全局錯誤頁面。 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');
}
感謝Sandeesh。這是有道理的,我實際上試圖實現的是使用自定義錯誤頁面(比如'500'自定義視圖)來處理任何不是認證或404錯誤的錯誤(例如{{$ x}},當$ x沒有定義) - 目前我的應用程序只是調用通用的'Whoops'頁面,我不知道如何更改,而不會弄亂供應商目錄中的文件 – user6122500
@ user6122500我編輯了我的答案,您可以按照處理每個錯誤/異常。 – Sandeesh