本文实例讲述了thinkPHP中钩子的两种配置调用方法。,具体如下:
thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十几次都没有成功,不过,我还是没有放弃,最后还是在一边调节细节,一边试验的过程中实现了钩子行为的设置。下面是我个人的设置经验,在这里跟大家分享一下。
个人做了两种设置,都试验成功了,一个简单点,在thinkphp的核心文件中模仿核心行为类添加了另一个行为类,下面是截图:

我的虚拟主机配置文件夹是D:/think
Thinkphp是tp框架文件夹,配置过tp框架应该都知道Library是tp放核心文件的文件夹,Behavior文件夹则是tp的钩子行为类文件的核心文件夹,里面放置着很多行为类文件,我只是模仿这些钩子行为类文件在里面建了一个钩子行为类文件adBehavior.class.php,内容如下:
<?php
namespace 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 HomeController;
use ThinkController;
use ThinkHook;//引进促发钩子行为的类,是为下面的Hook::add()调用做伏笔的
class IndexController extends Controller {
public function login(){
//这里我设置一个ad行为的标签,也就是给我自定义的adBehavior钩子行为类添加一个促发行为的标识
Hook::add('ad','BehavioradBehavior');
//第一个是执行标签的名称,第二个参数是行为的类的地址
Hook::add('test', "HomeBehaviorstestBehavior");
//Hook::add('test2', "HomeBehaviorstestBehavior");
$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>







