发布于 4年前

Laravel 关于目录或文章不存在的报错代码

今天整理一天的部署上线没完成。不过晚上搞了一个目录或者文章报错代码。

1、创建路由

直接将其创建在了Home前台indexController.php主页控制器上。

Route::get('/errors/nothing','Home\indexController@nothing');

2、创建控制器

indexController.php文件中创建函数:

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

在创建函数后,先测试路由是否打通,打通后创建报错视图文件。

3、建立报错模板

建立nothing.blade.php报错文件。


<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}','Home\IndexController@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...中表明:

©2020 edoou.com   京ICP备16001874号-3