1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > thinkphp6框架middleware中间件的定义和使用方法示例

thinkphp6框架middleware中间件的定义和使用方法示例

时间:2021-11-12 13:41:32

相关推荐

thinkphp6框架middleware中间件的定义和使用方法示例

thinkphp6框架middleware中间件的定义和使用方法示例

中间件定义中间件配置中间件前置/后置中间件前置行为的中间件后置行为的中间件中间件向控制器传参内置中间件

中间件

中间件主要用于拦截或过滤应用的HTTP请求,并进行必要的业务处理。

定义中间件

php think make:middleware Check

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

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

当前thinkpghp6的目录结构为多应用模式,所以,将middleware目录和middleware.php 文件拷贝了一份到index应用中

且修改中间件Check 类命名空间

<?phpnamespace app\index\middleware;class Check{public function handle($request, \Closure $next){echo '得到name=' . $request->param('name') . '<br>';if ($request->param('name') == 'qipa250') {echo '你好我是奇葩250';} else {echo '你好我不是奇葩250';}echo '<br>';echo '走到app\index\middleware\Check类的handle方法了';return $next($request);}}

配置中间件

在app/middleware.php或者app/admin/middleware.php里添加如下代码:

<?phpreturn [app\index\middleware\Check::class,];

访问index控制器中的hello方法

public function hello($name = 'ThinkPHP6'){echo $name;}

不传入name的值 打印结果如下

传入name的值为qipa250 打印结果如下:

前置/后置中间件

中间件是在请求具体的操作之前还是之后执行,完全取决于中间件的定义本身

前置行为的中间件

//关键代码$next($request);

中间件Check.php代码

<?phpnamespace app\index\middleware;class Check{public function handle($request, \Closure $next){echo '得到name=' . $request->param('name') . '<br>';if ($request->param('name') == 'qipa250') {echo '你好我是奇葩250';} else {echo '你好我不是奇葩250';}echo '<br>';echo '走到app\index\middleware\Check类的handle方法了';return $next($request);}}

控制器中hello的方法

public function hello($name = 'ThinkPHP6'){echo '<br>我是hello方法的name=' . $name;}

我们访问hello方法时,发现,优先执行的是中间件中的内容,最后才打印了hello方法中的内容

后置行为的中间件

新建中间件After

<?phpnamespace app\index\middleware;class After{public function handle($request, \Closure $next){//定义一个变量HOME_NAMEdefine('HOME_NAME', '奇葩天地网');$response = $next($request);return $response;}}

引入中间件

<?phpreturn [// app\index\middleware\Check::class,app\index\middleware\After::class,];

控制器的hello方法

public function hello($name = 'ThinkPHP6'){echo HOME_NAME;echo '<br>我是hello方法的name=' . $name;}

可以正常打印

若是修改位置

<?phpnamespace app\index\middleware;class After{public function handle($request, \Closure $next){$response = $next($request);//放到后置执行define('HOME_NAME', '奇葩天地网');return $response;}}

则报错,因为他找不到HOME_NAME这个变量

中间件向控制器传参

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

<?phpnamespace app\index\middleware;class After{public function handle($request, \Closure $next){$request->name='奇葩天地网';$response = $next($request);return $response;}}

控制器中

public function hello(Request $request,$name = 'ThinkPHP6'){echo 'name'.$request->name;echo '<br>我是hello方法的name=' . $name;}

内置中间件

新版内置了几个系统中间件,包括:

中间件类 描述

think\middleware\AllowCrossDomain 跨域请求支持

think\middleware\CheckRequestCache 请求缓存

think\middleware\LoadLangPack 多语言加载

think\middleware\SessionInit Session初始化

think\middleware\TraceDebug 页面Trace支持

这些内置中间件默认都没有定义,你可以在应用的middleware.php文件中、路由或者控制器中定义这些中间件,如果不需要使用的话,取消定义即可。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。