關於目錄或文章不存在的報錯程式碼

耕毅發表於2019-02-16

今天整理一天的部署上線沒完成。不過晚上搞了一個目錄或者文章報錯程式碼。

1、建立路由

直接將其建立在了Home前臺indexController.php主頁控制器上。

Route::get(`/errors/nothing`,`HomeindexController@nothing`);

2、建立控制器

indexController.php檔案中建立函式:

    public function nothing()
    {
        return view(`errors.nothing`);
    }

在建立函式後,先測試路由是否打通,打通後建立報錯檢視檔案。

3、建立報錯模板

建立nothing.blade.php報錯檔案。

<!DOCTYPE html>
<html>
    <head>
        <title>對不起,不存在!</title>

        <link href="https://fonts.googleapis.com/css?family=Lato:100" rel="stylesheet" type="text/css">

        <style>
            html, body {
                height: 100%;
            }

            body {
                margin: 0;
                padding: 0;
                width: 100%;
                color: #B0BEC5;
                display: table;
                font-weight: 100;
                font-family: `Lato`;
            }

            .container {
                text-align: center;
                display: table-cell;
                vertical-align: middle;
            }

            .content {
                text-align: center;
                display: inline-block;
            }

            .title {
                font-size: 72px;
                margin-bottom: 40px;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="content">
                <div class="title">對不起,不存在!</div>
            </div>
        </div>
    </body>
</html>

直接在位址列中執行

blog/errors/nothing

顯示執行正常。


4、建立中介軟體

利用composer建立中介軟體:

php artisan make:middleware CheckAge

建立完成後
撰寫內容

    public function handle($request, Closure $next)
    {
        $_arti=Article::where(`art_id`,$request->art_id)->find($request->art_id);
        if (!$_arti){
            return redirect(`errors/nothing`);
        }
        return $next($request);
    }

5、在路由上增加中介軟體功能

Route::get(`/a/{art_id}`,`HomeIndexController@article`)->middleware(`checkArt`);

測試通過。


6、後記

在建立中介軟體時候,確實測試了好多程式碼。
顯示看網上如何判斷空結果集。

即使取到的空結果集Eloquent仍然會返回IlluminateDatabaseEloquentCollection物件例項。這個我曾經也測試過,確實dd()測試之後含有結果集輸出,只是輸不了資料庫中的欄位內容,所以採用if()欄位判斷時,依然失效。

其實,Eloquent已經給我們封裝幾個判斷方法。


$result = Model::where(...)->get();
//不為空則
if ($result->first()) { } 
if (!$result->isEmpty()) { }
if ($result->count()) { }

但是使用->get()顯示這是一個無定義欄位,後來發現find()可以使用,具體原因待好好看手冊再分析。

參考:
在Laravel Eloquent 判斷取出的結果集是否為空http://www.cnblogs.com/wuoshi…和Eloquent collection: counting and detect empty http://stackoverflow.com/ques…中表明:

相關文章