1. 程式人生 > >Laravel5下自定義錯誤頁面的配置

Laravel5下自定義錯誤頁面的配置

♩ 背景

  • 最近試著學習 laravel 5.5,使用 composer 下載新的框架原始碼
composer create-project --prefer-dist laravel/laravel lar5Pro 5.5.*
  • 發現在輸入錯誤的連結時,會有如下的提示資訊:

  • 想到,一般成型的網站都會自定義404、501、503等頁面,所以通過網上搜索方法,進行測試,可推薦如下的實現過程 …
    框架: Laravel 5.5

♪ 操作

①. 解釋

  • 所有異常錯誤都由類 App\Exceptions\Handler 處理,該類包含兩個方法:report
    render ,其中的 render 方法會將異常渲染到 HTTP 響應中

②. render 方法優化

  • 參考了網上的相關介紹,發現可以將 App\Exceptions\Handler 中的 render 方法修改為下面的樣子:
public function render($request, Exception $exception)
    {
        /* 錯誤頁面 */
        if ($exception) {
            //TODO Laravel5.5 框架中 Exception 類不存在 getStatusCode()方法,或許只能支援前面的版本!
//$code = $exception->getStatusCode(); $code = FlattenException::create($exception)->getStatusCode(); return response()->view('error.' . $code, [], $code); } return parent::render($request, $exception); }

分析

經過對框架原始碼的檢視發現,我們是通過例項化 FlattenException

類來獲得請求狀態碼的,根據提供的測試類 FlattenExceptionTest ,從而得出了上述的程式碼,建議可以閱讀下原始碼以做比較

③. 建立 view 頁面

  • resources/views/error/ 目錄下建立錯誤頁面
  • 命名格式為 {error.code}.blade.php

④. 訪問測試

  • 舉例來講,在 404.blade.php 中編輯設計自己的 404頁面
  • 通過訪問一個不存在的路由,以本人為例,顯示效果如下:

  • 預設如果資料處理有錯,是 500 異常報錯,此時可以通過 debug 檢視並進行排錯處理…

♫ 附錄

  • 根據上面的操作,可擴充套件建立其他錯誤頁面
  • 此處附錄一下 404.blade.php 原始碼,僅做參考
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404頁面</title>
    <style>
        #box{
            margin: 0 auto;
            width: 540px;
            height: 540px;
        }
        p{
            margin-bottom: 60px;
            width: 540px;
            height: 20px;
            text-align: center;
            line-height: 20px;
        }
        #mes{
            font-size: 30px;
            color: red;
        }
        .hint{
            color: #999;
        }
        a{
            color: #259AEA;
            text-decoration:none
        }
    </style>
    <script>
        var i = 5;
        var intervalID = setInterval("fun()", 1000);
        function fun() {
            if (i == 0) {
                window.location.href = "/";
                clearInterval(intervalID);
            }
            document.getElementById("mes").innerHTML = i;
            i--;
        }
    </script>
</head>
<body>
<div id="box">
    <img src="{{ asset('images/error/404.jpg') }}" alt="404">
    <p>將在 <span id="mes">5</span> 秒鐘後返回 <a href="{{ url('/') }}">首頁</a></p>
    <p class="hint">非常抱歉 - 您可能輸入了錯誤的網址,或者該網頁已刪除或移動</p>
</div>
</body>
</html>