1.首先我们要知道官方对于行为的定义
ThinkPHP中的行为是一个比较抽象的概念,你可以把行为想象成在应用执行过程中的一个动作。在框架的执行流程中,例如路由检测是一个行为,静态缓存是一个行为,用户权限检测也是行为,大到业务逻辑,小到浏览器检测、多语言检测等等都可以当做是一个行为,甚至说你希望给你的网站用户的第一次访问弹出Hello,world!
这些都可以看成是一种行为,把这些行为抽离出来的目的是为了让你无需改动框架和应用,而在外围通过扩展或者配置来改变或者增加一些功能。
简而言之:只要是框架在运行,发生的所有的操作都可以理解为行为。
2.行为带来的好处
我们有时候开发会发现原有的框架某些东西已经被定义好了,如果你去改动就要读一遍上下源码,可能改了A处,忽略了B处,会导致一些不必要的问题出现,那么如果有行为的话,我们只需要在需要改变的某处,给它绑定一个行为,当框架运行到这个点之后,就会优先进入行为类执行我们需要的操作,从而不改变框架原有的东西
3.行为的使用
官方已经列出了使用方法,我说的使用,是我在项目中应用到的
(1)首先,找到tag.php
// 应用行为扩展定义文件
return [
// 应用初始化
'app_init' => [],
// 应用开始
'app_begin' => ['app\\common\\behavior\\InitConfig'],
// 模块初始化
'module_init' => [],
// 操作开始执行
'action_begin' => [],
// 视图内容过滤
'view_filter' => [],
// 日志写入
'log_write' => [],
// 应用结束
'app_end' => [],
];
在应用开始的时候我们绑定一个公共的行为类,我的习惯是公共的就在app下建立一个common文件夹里面放一个行为文件夹,然后里面写上整个项目公共的行为类,这个类里面
<?php
namespace app\common\behavior;
class InitConfig
{
public function run($params)
{
//只进行调用方法,逻辑写在公共的common.php中
}
}
这里一般只写调用方法就可以了,所有的逻辑判断方法全部可以写在common.php中,后面的MC其实也是这样,大家都熟知,M里面我们会写逻辑的处理,C里面只进行调用M中的方法,然后返回结果就行 。那么所有的公共方法都可以写在common.php中。
那么公共的写完了。模块也同样需要。
每个模块下面都建议新建,tag.php文件,然后目录结构都为,bmvc(behavior,model,view,controller),tag进行绑定,b里面写上需要的行为(比如检测登录状态,菜单权限,等等)
这样项目就会显得有条理性,不乱。