ThinkPHP6.0前置、后置中间件区别 |
1. 创建中间件命令行创建中间件类文件示例 // appmiddlewareAuth php think make:middleware Auth // appmiddlewareadminAuth php think make:middleware admin/Auth // appadminmiddlewareAuth php think make:middleware admin@Auth // ppadminmiddlewareloginAuth php think make:middleware admin@login/Auth 本文使用的是 php think make:middleware admin@Auth 2. 注册中间件创建中间件类文件后,就可以根据应用场景去注册中间件了 注册中间件分为四种类型: 全局中间件、应用中间件、路由中间件、控制器中间件 本文以最常见的场景为例: 将应用中间件作为登录流拦截器, 来说明前置中间件和后置中间件的区别 3. 前置、后置中间件一个中间件是前置中间件还是后置中间件,看的是中间件执行代码在请求之前执行还是请求之后执行 请求指的是 前置中间件: 中间件执行代码在 后置中间件: 中间件执行代码在 4. 前置、后置中间件的区别区别一: 在前置中间件中使用 在前置中间件打印 在后置中间件打印 区别二: 前置中间件没有执行控制器中的代码,而后置中间件则执行了 后置中间件存在的问题: 虽然能拦截,但是控制器中的代码已经执行了,因为调用 如下图所示,在控制器方法中往文件中写入了一条数据,使用后置中间件时即使被拦截也会执行文件写入,所以使用后置中间拦截其实没有意义的,我们应该使用前置中间件进行拦截 后置中间件、控制器方法如下图所示 查看网页源代码,页面上输出的值如下所示
而不是
5. 后置中间件登录拦截器(不推荐)public function handle($request, Closure $next) { $response = $next($request); $noCheck = ['login']; // 不做登陆校验的控制器 $controller = parse_name($request->controller()); if (!session('?admin') && !in_array($controller, $noCheck)) { return redirect(url('admin/login')); } return $response; } 6. 前置中间件登录拦截器(推荐使用)在前置中间件中无法使用 public function handle($request, Closure $next) { if (empty(session('admin')) && !preg_match('/login/', $request->pathinfo())) { return redirect((string)url('login/index')); } return $next($request); } 到此这篇关于ThinkPHP6.0前置、后置中间件区别的文章就介绍到这了,更多相关ThinkPHP6.0前置后置中间件内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |