首页 > 开发 > PHP > 正文

thinkPHP中钩子的两种配置调用方法详解

2024-05-04 22:51:11
字体:
来源:转载
供稿:网友

本文实例讲述了thinkPHP中钩子的两种配置调用方法。分享给大家供大家参考,具体如下:

thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十几次都没有成功,不过,我还是没有放弃,最后还是在一边调节细节,一边试验的过程中实现了钩子行为的设置。下面是我个人的设置经验,在这里跟大家分享一下。

个人做了两种设置,都试验成功了,一个简单点,在thinkphp的核心文件中模仿核心行为类添加了另一个行为类,下面是截图:

我的虚拟主机配置文件夹是D:/think

Thinkphp是tp框架文件夹,配置过tp框架应该都知道Library是tp放核心文件的文件夹,Behavior文件夹则是tp的钩子行为类文件的核心文件夹,里面放置着很多行为类文件,我只是模仿这些钩子行为类文件在里面建了一个钩子行为类文件adBehavior.class.php,内容如下:

<?phpnamespace Behavior;class adBehavior{  function run($arg){//在此介绍下,run必须的 ,细心的会在Think核心找到Behavior.class.php里面有这样一句话 abstract public function run(&$params);    echo '我是一条'.$arg['name'].'广告,'.$arg['value'].'代言';  }}

设置好了自定义的钩子行为类之后,我们接下来就要利用这个钩子行为类促发钩子的行为了,```钩子的行为```说白了其实就是促发钩子行为类的run方法里面的代码执行,我这里只是简单的输出run方法参数的内容,在应用中的,大家可以自由发挥。

下面是促发行为的操作:

解释一下:我这里是Home模块下面的IndexController控制器的登录方法

namespace Home/Controller;use Think/Controller;use Think/Hook;//引进促发钩子行为的类,是为下面的Hook::add()调用做伏笔的class IndexController extends Controller {  public function login(){    //这里我设置一个ad行为的标签,也就是给我自定义的adBehavior钩子行为类添加一个促发行为的标识    Hook::add('ad','Behavior//adBehavior');    //第一个是执行标签的名称,第二个参数是行为的类的地址    Hook::add('test', "Home//Behaviors//testBehavior");    //Hook::add('test2', "Home//Behaviors//testBehavior");    $param=array('name'=>'testBehavior');    $param2=array('LIS'=>'LLISTION');    $param3=array('music'=>'cangjingshikong');    $this->assign('param',$param);    $this->assign('param',$param2);    $this->assign('param',$param3);    $this->display();  }}

下面是login模板内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>  <title>ThinkPHP 行为(Behavior)扩展以及插件(Plug or Hook)详解(含实例)  </title>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <meta name="description" content="Hook使用方法" /></head><body><h1>How to used?</h1>{:hook('ad', array('name'=>'AV','value'=>'*老师'))}<div>————————————————分割线1——————————————————</div><div style="font-weight: bold ;color: #00ff00">{:hook('ad', array('name'=>'MV','value'=>'苍井空老师'))}</div><div>————————————————分割线2——————————————————</div>  <!--hook函数第一个参数是标签的名称,第二个参数随意-->  <!--tag函数第一个参数是标签的名称,第二个一定是变量,因为tag函数是引址传递的参数--><div>hook函数:{:hook('test', array('name'=>'World'))}<hr/></div><div>tag函数:{:tag('mv',$param)}<hr/></div><hr/><div>tag函数:{:tag('action_begin',$param)}</div></body></html>            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表