概述
行为(Behavior)是ThinkPHP扩展机制中比较关键的一项扩展,行为既可以独立调用,也可以绑定到某个标签中进行侦听,官方提出的CBD模式中行为也占了主要的地位,可见行为在ThinkPHP框架中意义非凡。这里指的行为是一个比较抽象的概念,你可以想象成在应用执行过程中的一个动作或者处理,在框架的执行流程中,各个位置都可以有行为产生,例如路由检测是一个行为,静态缓存是一个行为,用户权限检测也是行为,大到业务逻辑,小到浏览器检测、多语言检测等等都可以当做是一个行为,甚至说你希望给你的网站用户的第一次访问弹出Hello,world!这些都可以看成是一种行为,行为的存在让你无需改动框架和应用,而在外围通过扩展或者配置来改变或者增加一些功能。
而不同的行为之间也具有位置共同性,比如,有些行为的作用位置都是在应用执行前,有些行为都是在模板输出之后,我们把这些行为发生作用的位置称之为标签(位),当应用程序运行到这个标签的时候,就会被拦截下来,统一执行相关的行为,类似于AOP编程中的“切面”的概念,给某一个切面绑定相关行为就成了一种类AOP编程的思想。
系统标签位
系统核心提供的标签位置包括下面几个(按照执行顺序排列):app_init | 应用初始化标签位 |
path_info | PATH_INFO检测标签位 |
route_check | 路由检测标签位 |
app_begin | 应用开始标签位 |
action_name | 操作方法名标签位 |
action_begin | 控制器开始标签位 |
view_begin | 视图输出开始标签位 |
view_template | 视图模板解析标签位 |
view_parse | 视图解析标签位 |
view_filter | 视图输出过滤标签位 |
view_end | 视图输出结束标签位 |
action_end | 控制器结束标签位 |
app_end | 应用结束标签位 |
除了这些系统内置标签之外,开发人员还可以在应用中添加自己的应用标签,例如我们给应用的公共Action类CommonAction添加一个action_init标签位。
- Class CommonAction extends Action{
- Public function _initialize(){
- tag('action_init'); // 添加action_init 标签
- }
- }
复制代码
核心行为
新版系统的很多核心功能也是采用行为扩展组装的,虽然在开发过程中可能感觉不到这种变化,但正是由于这种架构设计的改变,让新版变得更加灵活和易扩展,这是一个里程碑式的改变,对于满足项目日益纷繁复杂的需求和定制底层框架提供了更多的方便和可能性。框架核心内置的行为包括如下:
行为名称 | 说明 | 对应标签位置 |
---|---|---|
checkRoute | 路由检测行为,完成内置的路由功能 |