thinkphp3 行为(behavior)分析和基本使用

Posted 花生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp3 行为(behavior)分析和基本使用相关的知识,希望对你有一定的参考价值。

 

1. 名词解析

官方解析: 来自 http://document.thinkphp.cn/manual_3_2.html#behavior_extend 

行为(Behavior)是一个比较抽象的概念,你可以想象成在应用执行过程中的一个动作或者处理,在框架的执行流程中,各个位置都可以有行为产生,例如路由检测是一个行为,静态缓存是一个行为,用户权限检测也是行为,大到业务逻辑,小到浏览器检测、多语言检测等等都可以当做是一个行为,
甚至说你希望给你的网站用户的第一次访问弹出Hello,world!这些都可以看成是一种行为,行为的存在让你无需改动框架和应用,而在外围通过扩展或者配置来改变或者增加一些功能。 而不同的行为之间也具有位置共同性,比如,有些行为的作用位置都是在应用执行前,有些行为都是在模板输出之后,我们把这些行为发生作用的位置称之为标签(位),当应用程序运行到这个标签的时候,就会被拦截下来,统一执行相关的行为,
类似于AOP编程中的“切面”的概念,给某一个切面绑定相关行为就成了一种类AOP编程的思想。

1. 1 标签位置

1) 系统核心提供的标签位置包括下面几个(按照执行顺序排列):

app_init    应用初始化标签位
path_info   PATH_INFO检测标签位
app_begin   应用开始标签位
action_name 操作方法名标签位
action_begin    控制器开始标签位
view_begin  视图输出开始标签位
view_parse  视图解析标签位
template_filter 模板内容解析标签位
view_filter 视图输出过滤标签位
view_end    视图输出结束标签位
action_end  控制器结束标签位
app_end         应用结束标签位

2) 自定义

行为定义: 通过{Common,Module}Conf ags.php配置文件定义,格式如下:

<?php
return array(
    action_begin=>array(Home\Behaviors\test,Home\Behaviors\test1),//一个标签位可以有多个行为,使用数组即可。
    // 如果是3.2.1以上版本 则需要改成
    action_begin=>array(Home\Behaviors\testBehavior,Home\Behaviors\test1Behavior)
);

开发人员还可以在应用中添加自己的应用标签。

比如在控制器的_initialize方法中:

ThinkHook::add(‘action_begin‘,‘Home\Behaviors\test1‘);//同时添加多个行为,只要将第二个参数换成数组即可。
// 3.2.1以上版本 需要改成
// ThinkHook::add(‘action_begin‘,‘Home\Behaviors\test1Behavior‘);

  

1.2  触发

行为的触发: 只要在合适的地方通过以下代码

ThinkHook::listen(‘标签名‘[,参数]);
// 或者
// tag(‘标签名‘[,参数]);

  

2. 使用场景

参考 1. 我们已经知道 行为 是类AOP编程的思想。除业务之外的操作,均可加入行为。比如日志,统计等。 

 

3. 使用案例

3.1 全局或者模块登录校验

 

 

 

------  未完待续  ------  

 

  1. app_init 应用初始化标签位
  2. path_info PATH_INFO检测标签位
  3. app_begin 应用开始标签位
  4. action_name 操作方法名标签位
  5. action_begin 控制器开始标签位
  6. view_begin 视图输出开始标签位
  7. view_parse 视图解析标签位
  8. template_filter 模板内容解析标签位
  9. view_filter 视图输出过滤标签位
  10. view_end 视图输出结束标签位
  11. action_end 控制器结束标签位
  12. app_end 应用结束标签位

以上是关于thinkphp3 行为(behavior)分析和基本使用的主要内容,如果未能解决你的问题,请参考以下文章

ThinkPHP3.2.3版本里面关于行为参数定义的位置在哪个文件夹有声明?

yii2 源码分析Behavior类分析

多智能体强化学习(MARL)近年研究概览 {Analysis of emergent behaviors(行为分析)_Learning communication(通信学习)}

行为和-ms-behavior之间的区别

行为Behavior的使用

基于行为树的AI 与 Behavior Designer插件