GA黄金甲

怎样在ThinkPHP6中使用中心件举行请求处置惩罚 ?

在thinkphp6中,中心件是一种常用的请求处置惩罚工具。通过中心件,我们可以利便地对请求举行处置惩罚,从而实现权限控制、日志纪录、请求验证等功效,提高了应用程序的清静性和可维护性。本文将先容怎样在thinkphp6中使用中心件举行请求处置惩罚。

一、什么是中心件

中心件是一种自力的请求处置惩罚程序,它可以阻挡客户端发出的请求并举行处置惩罚。在ThinkPHP6中,中心件是基于PSR-15规范设计的,通过中心件,我们可以对请求举行预处置惩罚或者后处置惩罚,从而实现一些常用的功效,如登录验证、权限控制、请求过滤、响应处置惩罚等。

二、ThinkPHP6中心件的使用

建设中心件

在ThinkPHP6中,可以通过下令行工具快速建设中心件。使用以下下令可以在app/middleware目录下建设一个名为CheckAuth的中心件。

连忙学习“PHP免费学习条记(深入)”;

php think make:middleware CheckAuth

登录后复制

建设好的CheckAuth中心件类如下:

<?php

namespace appmiddleware;

class CheckAuth
{
    public function handle($request, Closure $next)
    {
        // 执行中心件操作

        return $next($request);
    }
}

登录后复制

上面的代码中,中心件类必需包括handle要领。handle要领接受两个参数:$request和$next,其中$request是请求工具,$next是下一其中心件或者控制器的处置惩罚要领。在handle要领中,我们可以对$request工具举行一些预处置惩罚,然后使用return $next($request) 挪用下一其中心件或者控制器的处置惩罚要领。

注册中心件

建设好中心件后,需要在应用中注册。在ThinkPHP6中,可以通过应用设置、路由界说、控制器注解的方法注册中心件。

2.1 应用设置

可以在应用的设置文件config/app.php中设置全局中心件或者按需设置中心件。

// 全局中心件
'middleware' => [
    appmiddlewareCheckAuth::class,
],

// 按需设置中心件
'route' => [
    // Route::group 也支持
    'blog/detail' => ['appmiddlewareCheckAuth'],
]

登录后复制

上面的代码中,使用middleware设置项可以全局注册中心件,每其中心件的类名以逗号脱离。在route设置项中,可以针对差别的路由指定中心件。

2.2 路由界说

可以在Route::rule要领或者Route::group要领中指定中心件。

use thinkacadeRoute;

Route::rule('blog/detail', 'blog/detail', 'GET')->middleware('appmiddlewareCheckAuth');

登录后复制

上面的代码中,我们在挪用Route::rule要领时添加了middleware要领来指定中心件。

2.3 控制器注解

可以在控制器注解中指定中心件。

namespace appcontroller;

/**
 * @middleware(appmiddlewareCheckAuth::class)
 */
class Blog
{
    public function detail()
    {
        // 控制器的处置惩罚逻辑
    }
}

登录后复制

上面的代码中,我们在控制器注解中添加了middleware属性来指定中心件。

中心件的执行顺序

在ThinkPHP6中,中心件凭证注册的顺序执行,先注册先执行,后注册后执行。

在应用设置和控制器注解中,我们可以使用Middleware::class要领来指定中心件的执行顺序。如下所示:

// 全局中心件凭证顺序执行
'middleware' => [
    appmiddlewareLog::class,
    appmiddlewareCheckAuth::class,
],

// 按需设置中心件凭证顺序执行
'route' => [
    'blog/detail' => ['appmiddlewareLog', 'appmiddlewareCheckAuth']
],

// 控制器注解中心件凭证顺序执行
namespace appcontroller;

/**
 * @middleware([appmiddlewareLog::class, appmiddlewareCheckAuth::class])
 */
class Blog
{
    public function detail()
    {
        // 控制器的处置惩罚逻辑
    }
}

登录后复制

上面的代码中,我们凭证中心件注册的顺序指定了Middleware::class要领。

中心件的参数转达

中心件之间可以通过参数转达来共享数据。在handle要领中,我们可以在$request工具中添加属性、要领或者参数,然后将$request工具转达给下一其中心件或者控制器,从而实现数据的共享。

例如下面的示例中,我们在第一其中心件中界说了属性$name,并将其转达给第二其中心件及控制器,从而让它们可以使用该属性。

<?php

namespace appmiddleware;

class CheckAuth
{
    public function handle($request, Closure $next, $name)
    {
        $request->name = $name;

        return $next($request);
    }
}

class Log
{
    public function handle($request, Closure $next)
    {
        echo 'name:' . $request->name . '<br>';
        return $next($request);
    }
}

namespace appcontroller;

class Blog
{
    public function detail(Request $request)
    {
        echo 'name:' . $request->name . '<br>';
        // 控制器的处置惩罚逻辑
    }
}

// 路由设置文件
use thinkacadeRoute;

Route::rule('blog/detail', 'blog/detail', 'GET')
->middleware(['appmiddlewareCheckAuth:name', 'appmiddlewareLog']);

登录后复制

上面的代码中,我们在CheckAuth类的handle要领中界说了$name属性,并将其生涯在$request工具中。在Log类的handle要领和Blog控制器中,我们都可以通过$request工具来会见该属性。

在路由界说中,我们使用了中心件的参数转达功效,将参数name转达给CheckAuth中心件。在按需中心件的设置中,也可以使用Middleware::class要领来指定中心件参数。

五、小结

中心件是一种常用的请求处置惩罚工具,可以在请求前后对客户端请求举行预处置惩罚或者后处置惩罚。在ThinkPHP6中,中心件是基于PSR-15规范设计的,通过中心件,我们可以利便地实现权限控制、日志纪录、请求验证等功效。中心件凭证注册的顺序执行,中心件之间可以通过参数转达来共享数据。通过无邪使用中心件,我们可以提高应用程序的清静性、可维护性和可扩展性。

以上就是怎样在ThinkPHP6中使用中心件举行请求处置惩罚 ?的详细内容,更多请关注本网内其它相关文章!

免责说明:以上展示内容泉源于相助媒体、企业机构、网友提供或网络网络整理,版权争议与本站无关,文章涉及看法与看法不代表GA黄金甲滤油机网官方态度,请读者仅做参考。本文接待转载,转载请说明来由。若您以为本文侵占了您的版权信息,或您发明该内容有任何涉及有违公德、冒犯执法等违法信息,请您连忙联系GA黄金甲实时修正或删除。

相关新闻

联系GA黄金甲

18523999891

可微信在线咨询

事情时间:周一至周五,9:30-18:30,节沐日休息

QR code
【网站地图】【sitemap】