<?php /** * Created by PhpStorm. * User: Administrator * Date: 2016/7/17 * Time: 11:02 */ namespace Home\Behaviors; /* * 注册钩子行为类,要触发的行为写在run函数里 * */ class testBehavior extends \Think\Behavior{ public function run(&$arg){ echo 'test behavior=====下一行是参数<br/>'.$arg['name']; } }
在Conf文件夹里面(完整路径D:\think\application\Home\Conf\tags.php,当然这是我的情况)tags.php的内容:
<?php /** * Created by zhuowenfeng. * User: Administrator * Date: 2016/7/17 * Time: 10:56 */ return array( //'action_begin'=>array('Home\\Behaviors\\test','Home\\Behaviors\\test'), //一个标签位可以有多个行为,使用数组即可。 // 如果是3.2.1版本 则需要改成 'action_begin'=>array('Home\\Behaviors\\testBehavior','Home\\Behaviors\\testBehavior'), 'mv'=>array('Home\\Behaviors\\mvBehavior','Home\\Behaviors\\mvBehavior') );
解释一下,上面tags.php文件的内容,我配置了两个行为标识,``action_begin``,``mv``,是跟login.html那里相对应的,你可以回去仔细查看一下,login.html模板的内容,必定包含有``action_begin``,``mv``,这里也是tp框架在tags.php设置行为标识的语法,要是想问为什么可以自行探究,这里不多说。
还有请注意:上面那个被我注释掉的‘action_begin',其实是我的版本不适合这个语法,这是其他版本在tags.php配置行为标识的语法,这里tp里面的文档说的比较清楚,我就不多说了。如果,你的版本和我不同,那么请用上面的语法尝试一下,如果用上面的语法配置还是没办法配置成功,那么可能是你配置错了。
配置好了,那么请你再尝试调用模板login.html。我相信你一定能获得你想要的配置结果的。
这里提醒一句,请认真看我所做的注释,那里可以说也包含了很多信息。
接下来,我要讲讲设置监听钩子行为类的两个方法hook(),tag():
这两个函数都是tp内置监听钩子行为类的内置函数,可以在tp框架的函数库functions.php文件中找得到。这里只讲他们的调用区别,其实已经在login.html模板文件中提到了,这里就再次说明一下:
两个函数在functions.php的代码:
/** * 获取和设置配置参数 支持批量定义 * @param string|array $name 配置变量 * @param mixed $value 配置值 * @param mixed $default 默认值 * @return mixed */ function hook($hook,$params=array()){ \Think\Hook::listen($hook,$params); //监听一个钩子 } /** * 处理标签扩展 * @param string $tag 标签名称 * @param mixed $params 传入参数 * @return void */ function tag($tag, &$params=NULL) { \Think\Hook::listen($tag,$params); }
之所以在这里展示一下这两个函数的内容,是为了解释它们的区别:
细心的你应该发现tag函数的$param参数值里前面带了一个···&···符号,没有错:这个符号就是引用变量的地址符号,所以tag函数的$param参数只能是变量,请不要怀疑,你可以测试一下不是变量的情况,呵呵。
它们的区别也在于此,hook可以引用任何参数,tag只能引用变量的参数
上面那个tags.php文件里面我在每个标签行为的后面都重复配置了testBehavior自定义类,是为了证明,一个标签也可以对应多个行为类,如果你配置成功了,那么你运行login.html的时候,肯定发现login根据testBehavior设置的执行了两次。
最后,总结一下:
其实,我想说,tp框架的钩子行为类无非就是为了在某个特定地点,特定时间促发某种行为,这个是应用很广的,本人姑且这么认为。比如,你想要在某个模板植入广告,可以向我这样子简单的设置。
然后,简单的介绍tp行为的引用步骤:
首先第一步,你要先配置好自己的行为类,这是毋庸置疑的。
其次是促发的行为,你必须在你自定义的行为类的run里面设置,在这里实现你的任何行为,run方法就是你配置行为的地方。