当前位置:K88软件开发文章中心网站服务器框架ThinkPHP → 文章内容

CBD模式

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-26 15:31:51

由 AdairSweet 创建, 最后一次修改 2016-02-24 ThinkPHP引入了全新的CBD(核心Core+行为Behavior+驱动Driver)架构模式,从底层开始,框架就采用核心+行为+驱动的架构体系,核心保留了最关键的部分,并在重要位置设置了标签用以标记,其他功能都采用行为扩展和驱动的方式组合,开发人员可以根据自己的需要,对某个标签位置进行行为扩展或者替换,就可以方便的定制框架底层,也可以在应用层添加自己的标签位置和添加应用行为。而标签位置类似于AOP概念中的“切面”,行为都是围绕这个“切面”来进行编程。Core(核心)ThinkPHP的核心部分包括核心函数库、惯例配置、核心类库(包括基础类和内置驱动及核心行为),这些是ThinkPHP必不可少的部分。ThinkPHP/Common/functions.php // 核心函数库ThinkPHP/Conf/convention.php // 惯例配置文件ThinkPHP/Conf/debug.php // 惯例调试配置文件ThinkPHP/Mode/common.php // 普通模式定义文件ThinkPHP/Library/Think // 核心类库包ThinkPHP/Library/Behavior // 系统行为类库ThinkPHP/Library/Think/App.class.php // 核心应用类ThinkPHP/Library/Think/Cache.class.php // 核心缓存类ThinkPHP/Library/Think/Controller.class.php // 基础控制器类ThinkPHP/Library/Think/Db.class.php // 数据库操作类ThinkPHP/Library/Think/Dispatcher.class.php // URL解析调度类ThinkPHP/Library/Think/Exception.class.php // 系统基础异常类ThinkPHP/Library/Think/Hook.class.php // 系统钩子类ThinkPHP/Library/Think/Log.class.php // 系统日志记录类ThinkPHP/Library/Think/Model.class.php // 系统基础模型类ThinkPHP/Library/Think/Route.class.php // 系统路由类ThinkPHP/Library/Think/Storage.class.php // 系统存储类ThinkPHP/Library/Think/Template.class.php // 内置模板引擎类ThinkPHP/Library/Think/Think.class.php // 系统引导类ThinkPHP/Library/Think/View.class.php // 系统视图类Behavior目录下面是系统内置的一些行为类库,内置驱动则分布在各个不同的驱动目录下面(参考下面的驱动部分)。Driver(驱动)3.2版本在架构设计上更加强化了驱动的设计,替代了之前的引擎和模式扩展,并且改进了行为的设计,使得框架整体更加灵活,并且由于在需要写入数据的功能类库中都采用了驱动化的设计思想,所以使得新的框架能够轻松满足分布式部署的需求,对云平台的支持可以更简单的实现了。因此,在新版的扩展里面,已经取消了引擎扩展和模式扩展,改成配置不同的应用模式即可。驱动包括ThinkPHP/Library/Think/Cache/Driver // 缓存驱动类库ThinkPHP/Library/Think/Db/Driver // 数据库驱动类库ThinkPHP/Library/Think/Log/Driver // 日志记录驱动类库ThinkPHP/Library/Think/Session/Driver // Session驱动类库ThinkPHP/Library/Think/Storage/Driver // 存储驱动类库ThinkPHP/Library/Think/Template/Driver // 第三方模板引擎驱动类库ThinkPHP/Library/Think/Template/TagLib // 内置模板引擎标签库扩展类库Behavior(行为)行为(Behavior)是ThinkPHP扩展机制中比较关键的一项扩展,行为既可以独立调用,也可以绑定到某个标签(位)中进行侦听。这里的行为指的是一个比较抽象的概念,你可以想象成在应用执行过程中的一个动作或者处理,在框架的执行流程中,各个位置都可以有行为产生,例如路由检测是一个行为,静态缓存是一个行为,用户权限检测也是行为,大到业务逻辑,小到浏览器检测、多语言检测等等都可以当做是一个行为,甚至说你希望给你的网站用户的第一次访问弹出Hello,world!这些都可以看成是一种行为,行为的存在让你无需改动框架和应用,而在外围通过扩展或者配置来改变或者增加一些功能。而不同的行为之间也具有位置共同性,比如,有些行为的作用位置都是在应用执行前,有些行为都是在模板输出之后,我们把这些行为发生作用的位置称之为标签(位),也可以称之为钩子,当应用程序运行到这个标签的时候,就会被拦截下来,统一执行相关的行为,类似于AOP编程中的“切面”的概念,给某一个标签绑定相关行为就成了一种类AOP编程的思想。系统标签位系统核心提供的标签位置包括(按照执行顺序排列):app_init 应用初始化标签位 module_check 模块检测标签位(3.2.1版本新增)path_info PATH_INFO检测标签位 app_begin 应用开始标签位 action_name 操作方法名标签位 action_begin 控制器开始标签位 view_begin 视图输出开始标签位 view_template 视图模板解析标签位 view_parse 视图解析标签位 template_filter 模板解析过滤标签位view_filter 视图输出过滤标签位 view_end 视图输出结束标签位 action_end 控制器结束标签位 app_end 应用结束标签位 在每个标签位置,可以配置多个行为,行为的执行顺序按照定义的顺序依次执行。除非前面的行为里面中断执行了(某些行为可能需要中断执行,例如检测机器人或者非法执行行为),否则会继续下一个行为的执行。除了这些系统内置标签之外,开发人员还可以在应用中添加自己的应用标签,在任何需要拦截的位置添加如下代码即可:// 添加my_tag 标签侦听\Think\Hook::listen('my_tag');方法第一个参数是要侦听的标签位,除此之外还可以传入并且只接受一个参数,如果需要传入多个参数,请使用数组。// 添加my_tag 标签侦听\Think\Hook::listen('my_tag',$params); 该参数为引用传值,所以只能传入变量,因此下面的传值是错误的:// 添加my_tag 标签侦听\Think\Hook::listen('my_tag','param'); 核心行为系统的很多核心功能也是采用行为扩展组装的,对于满足项目日益纷繁复杂的需求和定制底层框架提供了更多的方便和可能性。核心行为位于 ThinkPHP/Behavior/ 目录下面,框架核心内置的行为包括如下:行为名称说明对应标签位置BuildLite生成Lite文件(3.2.1版本新增)app_initParseTemplate模板文件解析,并支持第三方模板引擎驱动view_parseShowPageTrace页面Trace功能行为,完成页面Trace功能view_endShowRuntime运行时间显示行为,完成运行时间显示view_filterTokenBuild令牌生成行为,完成表单令牌的自动生成view_filterReadHt

[1] [2]  下一页


CBD模式