




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第thinkPHP3.2.2框架行为扩展及demo示例本文实例讲述了thinkPHP3.2.2框架行为扩展。分享给大家供大家参考,具体如下:
首先介绍一下行为扩展类,本人愚钝,还是借用tp手册上的来说:
行为(Behavior)是一个比较抽象的概念,你可以想象成在应用执行过程中的一个动作或者处理,在框架的执行流程中,各个位置都可以有行为产生,例如路由检测是一个行为,静态缓存是一个行为,用户权限检测也是行为,大到业务逻辑,小到浏览器检测、多语言检测等等都可以当做是一个行为,甚至说你希望给你的网站用户的第一次访问弹出Hello,world!这些都可以看成是一种行为,行为的存在让你无需改动框架和应用,而在外围通过扩展或者配置来改变或者增加一些功能。
而不同的行为之间也具有位置共同性,比如,有些行为的作用位置都是在应用执行前,有些行为都是在模板输出之后,我们把这些行为发生作用的位置称之为标签(位),当应用程序运行到这个标签的时候,就会被拦截下来,统一执行相关的行为,类似于AOP编程中的“切面”的概念,给某一个切面绑定相关行为就成了一种类AOP编程的思想。
那下面就入正题,讲解一下行为(Behavior)的实例
让行为工作有两种方式:
1.通过在conf目录下的tags.php文件配置行为通过\Think\Hook::listen(name);触发行为
2.通过\Think\Hook::add(name,class_namespace)注册一个行为,然后触发(注册函数必须在触发函数之前)
在我们讲解实例之前,很有必要先讲讲行为是怎么触发的。
行为触发靠的是\Think\Hook::listen(name)方法,那方法里面到底做了什么,我们先看看源码:
*监听标签的插件
*@paramstring$tag标签名称
*@parammixed$params传入参数
*@returnvoid
*addbyyangligao2014/8/25
*listen个人觉得方法名称取得不怎么好理解,看程序中就知道这个方法实际上就是看$tags中有没有参数中的tag
*如果有,就触发之;
*如果没有,你懂的,过之(至少程序中是没有做操作)。
staticpublicfunctionlisten($tag,$params=NULL){
if(isset(self::$tags[$tag])){
if(APP_DEBUG){
G($tag.'Start');
trace('['.$tag.']--START--','','INFO');
foreach(self::$tags[$tag]as$name){
APP_DEBUGG($name.'_start');
$result=self::exec($name,$tag,$params);
if(APP_DEBUG){
G($name.'_end');
trace('Run'.$name.'[RunTime:'.G($name.'_start',$name.'_end',6).'s]','','INFO');
if(false===$result){
//如果返回false则中断插件执行
return;
if(APP_DEBUG){//记录行为的执行日志
trace('['.$tag.']--END--[RunTime:'.G($tag.'Start',$tag.'End',6).'s]','','INFO');
//return;//thinkphp原始的样式
return$result;//笔者^_^自己添加的
这个方法里面记录行为的一些运行状态的值,函数最后一点笔者做了一点修改,只是让这个方法有了一份返回值(而非返回空)
最重要的地方就是
$result=self::exec($name,$tag,$params);
这个地方就开始执行所谓的行为了,先看看exec方法的源码
*执行某个插件
*@paramstring$name插件名称
*@paramstring$tag方法名(标签名)
*@paramMixed$params传入的参数
*@returnvoid
*addbyyangligao2014/8/25
*exec执行文件
staticpublicfunctionexec($name,$tag,$params=NULL){
if('Behavior'==substr($name,-8)){
//行为扩展必须用run入口方法
$tag='run';
//file_put_contents('D:/1.txt',$name,FILE_APPEND);
$addon=new$name();
return$addon-$tag($params);
这个方法所做的就是先判断行为配置中的设定的类名中是否有Behavior这个字符串,如果有就执行一个叫run的方法
准备工作差不多了。下面动手试试实例
方法一:通过在conf目录下的tags.php文件配置行为通过\Think\Hook::listen(name);触发行为
我们先在Home/Conf下面准备tags.php配置文件
returnarray(
'app_app'=array('Home\Behavior\DemoShowHelloWorldBehavior'),
根据这个配置文件,我们还得在Home/Behavior下面准备DemoShowHelloWorldBehavior的类文件
namespaceHome\Behavior;
useThink\Controller;
*这个文件的类可以继承Controller类这样就可以使用assign方法
*这个方法框架里面:对你的返回值不理睬,只是用作判断插件有没有出错
*出于某个目的,笔者对Hook::listen方法作了小修改让他可以返回值,或许会有点用
classDemoShowHelloWorldBehaviorextendsController{
publicfunctionrun(){
$return_string='(Home\Behavior)fontDemoShowHelloWoldBehavior/fontisRunning....^_^!hr
$this-assign('behavior_assign','ThisisassignedbyfontDemoShowHelloWoldBehavior/font
return$return_string;
这个类文件,我们是继承
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纺织品设计师证书考试的职业素养提升试题及答案
- 中学生艾滋病知识普及课件
- 驿站合伙合同协议书
- 纺织工程师证书考试解析中的关键试题及答案
- 废旧门窗回收合同协议书
- 《跨国物流操作》课件
- 合同协议书范文
- 合同毁约协议书
- 爱情合同协议书
- 退款合同协议书
- 人工智能在新闻中的应用
- (高清版)TDT 1015.1-2024 地籍数据库 第1部分:不动产
- CJT156-2001 沟槽式管接头
- 民宿承包合同协议书样本
- 幼小衔接 每日一练
- 哈尔滨市木兰县文职辅警招聘考试真题
- 烈士陵园智慧管理系统
- 室上速心动过速治疗
- 铸就数字坚盾:网络安全技术智慧树知到期末考试答案章节答案2024年青岛工学院
- 芦丁鸡怎么养
- 幽门螺杆菌预防措施及治疗
评论
0/150
提交评论