搜索
系统检测到您的用户名不符合规范:

thinkphp5.1 行为 中间件在行为中的执行位置 整理

浏览:1526 发布日期:2018年09月29日 分类:ThinkPHP5专区 关键字: thinkphp5.1 行为 中间件
行为:不知道怎么解释,我把它比作是一个流程;
应用流程:'app_init'【应用初始化】-->'app_begin'【应用开始】-->'module_init'【模块初始化】--->[中间件执行【前置中间件】]--->'action_begin'【操作开始执行】--->['view_filter'【视图内容过滤】 | 'log_write'【日志写入】]-->[中间件执行【后置中间件】]--->'app_end'【应用结束】
先记住这个流程,是我自己理解的,[]:可选;【】:文字说明

应用走到那个步骤就执行那个步骤的行为类文件或者中间件文件

行为文件的定义:<?php
/**
* Created by ahai
* Time: 2018年9月29日 0029 上午 9:30
* Email: <764882431@qq.com>
*/

namespace app\admin\behavior;

use think\Request;

class Test
{
//引入jump类
//use \traits\controller\Jump;
//行为入口执行方法,
public function run(Request $request, $params)
{
//sleep(1);
// 行为逻辑
echo "<br/>";
//echo $request->path();

//echo "<br/>";
//echo $params;
//echo "<br/>";
echo "test行为:";echo microtime();
echo "<br/>";
// return $this->redirect("\login");
}
}
行为入口方法run();-->就是入口执行方法
这个名称可以修改

行为的入口方法名称支持自定义,如果需要更改在应用公共文件中添加下面的代码即可:
Hook::portal('portal');
入口方法名称就变成了portal。

这样一个行为文件就创建好了,接下来就是怎么让它实现的操作;

在应用目录下面或者模块的目录下面定义tags.php文件来统一定义行为:<?php

//行为中有多个类时,执行顺序:从上到下
// 应用行为扩展定义文件
return [
// 应用初始化
'app_init'=> [
'app\\admin\\behavior\\Test',
'app\\admin\\behavior\\Check'
],
// 应用开始
'app_begin' => [],
// 模块初始化
'module_init' => [

],
// 操作开始执行 【前置中间件在这个之前】
'action_begin' => [

],
// 视图内容过滤
'view_filter' => [

],
// 日志写入
'log_write' => [

],
// 应用结束【后置中间件在这个之前】
'app_end' => [
'app\\admin\\behavior\\Check'
],
];
这样就可以了,当应用走到那个位置就执行那个行为
根据官方说明,当行为中某个行为返回false时,后续行为不再执行,但是应用仍然继续执行,也就是说行为中出错只是不执行行为文件,应用继续执行

其他的整理说明:
下面这个行为例子,就是在同一个行为文件中写了不同的行为【这样理解同一个文件,写了两个不同的行为,而且只能在对应的行为上才执行对应的操作】
例子说明:在tags.php中加入了appInit,appEnd中加入这个行为文件
当执行了appInit 时就执行这个文件的appInit()方法,执行到appEnd时就执行appEnd()方法namespace app\index\behavior;

class Test
{
public function appInit($params)
{

}

public function appEnd($params)
{

}
}
行为的监听、执行:public function index()
{
echo "<br/>监听行为:Hook::Listen监听之前记得要先把行为注册,可以在tags.php中主册,也可以使用Hook::add()注册-----------------";
$params = 'ahai';
\Hook::add('app_init',['app\\admin\\behavior\\Check','app\\admin\\behavior\\Test']);
\Hook::listen('app_init',$params);

echo "<br/>直接执行行为文件【不管有没有注册,我就是执行行为文件】:-----------------";
\Hook::exec('app\\admin\\behavior\\Test',$params);

//return $this->fetch();
}
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
保护海
积分:2515 等级:LV3
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /