惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
G
Google Developers Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
腾讯CDC
有赞技术团队
有赞技术团队
Vercel News
Vercel News
MongoDB | Blog
MongoDB | Blog
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog RSS Feed
I
InfoQ
Blog — PlanetScale
Blog — PlanetScale
博客园_首页
The Cloudflare Blog
B
Blog
C
Check Point Blog
Stack Overflow Blog
Stack Overflow Blog
IT之家
IT之家
U
Unit 42
D
Docker
月光博客
月光博客
aimingoo的专栏
aimingoo的专栏
博客园 - Franky
A
About on SuperTechFans

博客园 - 范仁义

吊打市面上100%的markdown编辑器 范仁义软件合集 全网最通俗易懂傅里叶变换 【强化学习玩转超级马里奥】05-最最简单的超级马里奥训练过程 【强化学习玩转超级马里奥】04-stable-baselines3 库介绍 【强化学习玩转超级马里奥】03-马里奥环境代码说明 【强化学习玩转超级马里奥】02-运行超级马里奥 【强化学习玩转超级马里奥】01-nes-py 包安装实例 【强化学习玩转超级马里奥】01-超级马里奥环境安装 【强化学习玩转超级马里奥】00-强化学习玩马里奥课程介绍 linux查找操作 分析MongoDB架构案例 legend3---bootstrap modal框出现蒙层,无法点击modal框内容(z-index问题) legend3---laravel报419错误 laravel自定义中间件实例 git: Failed to connect to github.com port 443: Timed out 记忆规律 tinymce上传的图片不指定宽高 z-index总结
laravel中间件Middleware原理解析及实例
范仁义 · 2021-09-26 · via 博客园 - 范仁义

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请求或者是重定向,就不处理这个请求

否则就处理这个请求