前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ThinkPHP6中间件的使用+完整代码实例

ThinkPHP6中间件的使用+完整代码实例

作者头像
用户8099761
发布2023-05-11 15:47:05
8160
发布2023-05-11 15:47:05
举报
文章被收录于专栏:私人订制私人订制

定义中间件

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

代码语言:javascript
复制
php think make:middleware Check

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

代码语言:javascript
复制
<?php
namespace app\middleware;

class Check {
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next) {
        //
        if (empty($request->session('username'))) {
            return redirect(url('user/login'));
        }
        return $next($request);
    }
}

中间件的入口执行方法必须是handle方法,而且第一个参数是Request对象,第二个参数是一个闭包。

中间件handle方法的返回值必须是一个Response对象。

在这个中间件中我们判断当前请求的name参数等于think的时候进行重定向处理。否则,请求将进一步传递到应用中。要让请求继续传递到应用程序中,

只需使用 request 作为参数去调用回调函数 next 。

控制器中使用

插入一行代码:

代码语言:javascript
复制
protected $middleware = ['app\middleware\Check::class'];

附:登录的代码

代码语言:javascript
复制
public function login() {
        if (Request::isGet()) {
            return view();
        } else {
            // 接受登陆的数据
            $username = input('username');
            $pwd = input('pwd');
            // 验证
            $data = Db::table('user')->where('username', $username)->find();
            if (empty($data)) {
                return $this->error('用户不存在,请注册', 'reg');
            } else {
                if ($pwd !== $data['pwd']) {
                    return $this->error('密码错误');
                }
                // 保存到session
                session('username', $username);
                return $this->success('登陆成功', 'show');
            }
        }
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-1-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义中间件
  • 控制器中使用
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档