thinkphp中间件

发布于:2025-07-04 ⋅ 阅读:(16) ⋅ 点赞:(0)

定义中间

可以通过命令行指令快速生成中间件

php think make:middleware Check

这个指令会 app/middleware目录下面生成一个Check中间件。

<?php

namespace app\middleware;

class Check
{
    public function handle($request, \Closure $next)
    {
        if ($request->param('name') == 'think') {
            return redirect('index/think');
        }

        return $next($request);
    }
}

middleware:

注册一个中间件:

如果没有返回return $next($request),那它就没有办法往下执行。所以就当个固定格式就可以了

前/后置中间件

1. 将$next($request)放在方法底部的方式,属于前置中间件;

2. 前置中间件就是请求阶段来进行拦截验证,比如登录判断、跳转、权限等;

3. 而后置中间件就是请求完毕之后再进行验证,比如写入日志等等;

public function handle($request, \Closure $next)
 {
 //中间件代码,前置
return $next($request);
 }
 public function handle($request, \Closure $next)
 {
 $response = $next($request);
 //中间件代码,后置
return $response;
 }

1. 中间件提供了一个end()方法,可以在中间件执行到最后时执行;


public function end(Response $response)
 {
 //中间件执行到最后执行
echo $response->getData();
 }

局部中间件

路由中间件

1. 创建一个给路由使用的中间件,判断路由的ID值实现相应的验证

class Auth
 {
 public function handle($request, \Closure $next)
 {
 if ($request->param('id') == 10) {
 echo '是管理员!';
 }
 return $next($request);
 }
 }

1. 路由方法提供了一个middleware()方法,让指定的路由采用指定的中间件;

Route::rule('ar/:id', 'Address/read')
->middleware(\app\middleware\Auth::class);
->middleware([Auth::class, Check::class]); //支持多个中间件,这里use了


网站公告

今日签到

点亮在社区的每一天
去签到