道者编程

laravel5.8(二)中间件

一:概念:什么是中间件:

中间件,顾名思义就是在中间,在什么中间?laravel的中间件就是在路由和控制器中间。其实就是将程序解耦,比如laravel的中间件可以过滤、判断HTTP请求,当然这部分如果放在控制器也是可以的,但如果用中间件的方式,整个程序更加清晰,更加方便,也更利于维护。中间件判断一些请求,做一些特殊的事情,控制器安心搞具体的业务逻辑。

二:中间件可以做哪些事情?

1:指定路由

2:过滤指定的http参数

3:权限认证

4:记录日志等等

三:laravel中间件使用流程

1:定义中间件

2:注册中间件

3:使用中间件

四:中间件的具体使用步骤

1:定义中间件

php artisan make:middleware CheckAge //定义一个CheckAge中间件
这样就在app\Http\Middleware目录下生成了一个CheckAge.php中间件文件。

注意使用artisan命令的时候,需要在artisan的当前目录,或者指定artisan路径

这个文件打开看一下,现在是这样的

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}
我们稍微改一下:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     * 处理传入的请求
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // 这里写逻辑,判断传过来的age参数,如果小于等于18,我们认为这个人太小了,不能注册我们网站
        if ($request->age <= 18) {
            echo '年纪太小了';
        }
        return $next($request);
    }
}

2:注册中间件和使用中间件,这两个地方一起来讲

在哪里注册:app/Http/Kernel.php,打开看下,这里面有4个方法:

1:protected $middleware //全局中间件,所有请求中间件都会执行

2:routeMiddleware //路由中间件,也就是和路由结合起来使用:

//我们刚才定义了CheckAge中间件,这里就这样注册
protected $routeMiddleware = [
    ...
    'CheckAge' => \App\Http\Middleware\CheckAge::class,
];

//然后怎么使用?这里就是路由应用
Route::get('/register/{age}',function($age=''){
    //echo $age;
})->middleware('CheckAge');

打开访问一下:


3:protected $middlewareGroups //路由中间件组,如果路由要用多个中间件,假设现在要用10个中间件,按照2的方法就比较麻烦,也不直观,难道我们添加10个路由?所以就用分组的形势,这个默认有两组,web和api

Route::group(['middleware' => 'api'],function(){
    $route->get('hello/laravel',function(){});
    $route->get('hello/php',function(){});
    ……
    // 里面所有的路由都访问api路由组
});
4:protected $middlewarePriority 排序中间组:特殊情况下,可能需要中间件以特定的顺序执行,但是当它们被分配到路由时,你无法控制它们的顺序。在这种情况下,可以使用 app/Http/Kernel.php 文件的 $middlewarePriority 属性指定中间件优先级:




最新评论:
我要评论:

看不清楚