tp6 中间件的常用操作

本文详细介绍了ThinkPHP6框架中中间件的初始化、声明、使用方式,包括全局、局部和路由中间件。区分了前置和后置中间件的执行顺序,并展示了如何在中间件中传递值给主页面。同时,阐述了中间件的工作顺序,为开发者提供了清晰的中间件操作指南。
摘要由CSDN通过智能技术生成

目录

1、中间件的初始化工作

2、前置和后置中间件区别

3、中间件给主页面传值

4、中间件的工作顺序


1、中间件的初始化工作

使用中间件首先得创建中间件,可以通过cmd找到对应tp6项目路径,输入以下composer命令自动创建中间件目录及文件

php think make:middleware Check

创建好后如图:

也可以手动创建middleware目录和对应文件:

<?php
declare (strict_types = 1);

namespace app\middleware;

use think\Response;

class Check
{
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        //
       
    }
}

 中间件使用需先声明,声明方法如下:

1、找到route/middleware.php写入对应声明,如下
<?php
// 全局中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
    // \think\middleware\SessionInit::class
    \app\middleware\Check2::class,//方法一,直接引入声明
    'check',//方法二,别名引入法
];
2、使用方法二别名引入时,需要先到config/middleware.php里配置别名,配置方法如下:
<?php
// 中间件配置
return [
    // 别名或分组
    'alias'    => [
        'check'=>\app\middleware\Check::class,
        'check2'=>\app\middleware\Check2::class,
    ],
    // 优先级设置,此数组中的中间件会按照数组中的顺序优先执行
    'priority' => [],
];

这样第一步里就可以直接使用别名进行声明了。

3、还有一种比较常用的中间件使用方法,就是不通过1、2声明,而使用路由中间件
路由中间件声明方法如下:
找到对应的路由文件,如route/app.php书写如下:
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
use think\facade\Route;

Route::rule('hhh','test/index')->middleware(\app\middleware\Check2::class);

这样访问路径时便可以通过该中间件进行限制。

2、前置和后置中间件区别

前置和后置中间件都是很常用的:

前置中间件的通常写法:

<?php

namespace app\middleware;

class Before
{
    public function handle($request, \Closure $next)
    {
        // 添加中间件执行代码

        return $next($request);
    }
}

后置中间件的通常写法:

<?php

namespace app\middleware;

class After
{
    public function handle($request, \Closure $next)
    {
		$response = $next($request);

        // 添加中间件执行代码

        return $response;
    }
}

也可以写在一起:

    public function handle1($request,\Closure $next){
        //处理HTTP请求,中间键代码
        if($request->param('name')==='index'){
            return redirect('../');//返回首页
        }
        //以上部分为前置中间件
        echo "前置中间件<br>";

        //获取响应,获取响应之前的代码为前置中间件,
        $response=$next($request);
        //获取响应之后的为后置中间件的执行内容

        //以后部分为后置中间件
        echo "后置中间件<br>";
        //这里回调本身返回response对象
        return $response;
    }

可以看到前置和后置中间件的执行区别就在于是否在获取$next($request)前或后。

通过还有个收尾工作可以附加,就是在中间件中写入end方法如下:

    public function end(Response $response){
        echo '<br>收尾工作';
    }

执行先后顺序如下:

3、中间件给主页面传值

比较简单的传值如下:

可以通过给请求对象赋值的方式传参给控制器(或者其它地方),例如

<?php

namespace app\middleware;

class Hello
{
    public function handle($request, \Closure $next)
    {
        $request->hello = 'ThinkPHP';
        
        return $next($request);
    }
}

然后在控制器的方法里面可以直接使用

public function index(Request $request)
{
	return $request->hello; // ThinkPHP
}

4、中间件的工作顺序

全局中间件>局部中间件>路由中间件>页面组件

中间件的内部执行顺序为:前置>页面操作>后置>return操作>end收尾

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TP6的svalidate方法是ThinkPHP6框架中用于验证数据的方法。该方法可以在控制器或模型中使用,用于对用户输入的数据进行验证,以确保数据的合法性和完整性。 在TP6中,可以通过以下步骤来使用svalidate方法: 1. 首先,在控制器或模型中引入验证器类的命名空间,例如: use app\validate\User; 2. 然后,创建一个验证器对象,例如: $validate = new User; 3. 接下来,使用svalidate方法对数据进行验证,例如: $result = $validate->svalidate($data); 其中$data是要验证的数据,$result是验证结果,如果验证通过,$result将返回true,否则将返回错误信息。 需要注意的是,TP6的验证器类需要事先定义好验证规则和错误提示信息。你可以在验证器类中使用规则和消息方法来定义验证规则和错误提示信息。例如: public function rule() { return [ 'username' => 'require|max:25', 'password' => 'require|min:6', ]; } public function message() { return [ 'username.require' => '用户名不能为空', 'username.max' => '用户名长度不能超过25个字符', 'password.require' => '密码不能为空', 'password.min' => '密码长度不能小于6个字符', ]; } 通过以上步骤,你就可以在TP6中使用svalidate方法对数据进行验证了。如果验证通过,可以继续处理业务逻辑;如果验证失败,则可以返回错误信息给用户。 总结一下,TP6的svalidate方法是用于数据验证的方法,可以通过引入验证器类、创建验证器对象和使用svalidate方法对数据进行验证,以确保数据的合法性和完整性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值