微信扫一扫打赏支持

laravel中间件Middleware原理解析及实例

laravel中间件Middleware原理解析及实例

一、总结

一句话总结:

 

 

二、laravel中间件Middleware原理解析

 

1、身份中间件 实例

legend3/app/Http/Middleware/Home/User.php

这是写的中间件的代码,逻辑就是判断用户是否登录,没登录就退出

 1 <?php
 2 
 3 namespace App\Http\Middleware\Home;
 4 
 5 use Closure;
 6 use Auth;
 7 
 8 class User
 9 {
10     /**
11      * Handle an incoming request.
12      *
13      * @param  \Illuminate\Http\Request  $request
14      * @param  \Closure  $next
15      * @return mixed
16      */
17     public function handle($request, Closure $next)
18     {
19         //前端的登录中间件
20         //作用是用Auth::guard('user')->check()来验证用户登录,
21         //如果登录成功就进行下一步
22         //如果没有登录成功就返回到登录页
23         if(!Auth::guard('user')->check()){
24             return redirect('/login');
25         }
26         return $next($request);
27     }
28 }

legend3/app/Http/Kernel.php

这里是注册中间件,相当于给中间件取别名,使用的时候可以直接通过别名调用

 1     protected $routeMiddleware = [
 2         //fry
 3         //后端的登录中间件注册
 4         'admin.auth'=>Middleware\Admin\Admin::class,
 5         //前端的登录中间件注册
 6         'home.auth'=>Middleware\Home\User::class,
 7 
 8         //
 9 
10         'auth' => \App\Http\Middleware\Authenticate::class,
11         'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
12         'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
13         'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
14         'can' => \Illuminate\Auth\Middleware\Authorize::class,
15         'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
16         'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
17         'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
18         'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
19     ];

在配置文件auth中注册guard

如果使用Auth::guard('user')->check()
中的guard,就需要注册guard

如果只是作为普通中间件使用,不使用guard,就不需要

例如$this->middleware('home.auth')->except(['index','get_video_comment']);

 

 

使用

在各个控制器中

class VideoController extends Controller
{
    public function __construct()
    {
        //排除'index'方法,进行中间件的验证
        $this->middleware('home.auth')->except(['index','get_video_comment']);
//        $this->middleware('home.auth')->except(['get_video_comment']);
    }
    省略若干代码...
}

如果没有登录,就会被被中间件拦截,跳转到登录页面

 

 

2、pjax中间件 实例

注册

 

中间件代码及位置

 

pjax中间件代码中的逻辑也非常简单,如果不是pjax请求或者是重定向,就不处理这个请求

否则就处理这个请求

 

 

 

 

 

 
posted @ 2021-09-26 16:47  范仁义  阅读(140)  评论(0编辑  收藏  举报