《PHP應用:thinkPHP中鉤子的兩種配置調用方法詳解》要點:
本文介紹了PHP應用:thinkPHP中鉤子的兩種配置調用方法詳解,希望對您有用。如果有疑問,可以聯系我們。
相關主題:thinkphp教程
PHP編程本文實例講述了thinkPHP中鉤子的兩種配置調用方法.分享給大家供大家參考,具體如下:
PHP編程thinkphp的鉤子行為類是一個比較難以理解的問題,網上有很多寫thinkphp鉤子類的文章,我也是根據網上的文章來設置thinkphp的鉤子行為的,但根據這些網上的文章,我在設置的過程中,嘗試了十幾次都沒有成功,不過,我還是沒有放棄,最后還是在一邊調節細節,一邊試驗的過程中實現了鉤子行為的設置.下面是我個人的設置經驗,在這里跟大家分享一下.
PHP編程個人做了兩種設置,都試驗成功了,一個簡單點,在thinkphp的核心文件中模仿核心行為類添加了另一個行為類,下面是截圖:
PHP編程
PHP編程我的虛擬主機配置文件夾是D:/think
PHP編程Thinkphp是tp框架文件夾,配置過tp框架應該都知道Library是tp放核心文件的文件夾,Behavior文件夾則是tp的鉤子行為類文件的核心文件夾,里面放置著很多行為類文件,我只是模仿這些鉤子行為類文件在里面建了一個鉤子行為類文件adBehavior.class.php,內容如下:
PHP編程
<?php
namespace Behavior;
class adBehavior{
function run($arg){
//在此介紹下,run必須的 ,細心的會在Think核心找到Behavior.class.php里面有這樣一句話 abstract public function run(&$params);
echo '我是一條'.$arg['name'].'廣告,'.$arg['value'].'代言';
}
}
PHP編程設置好了自定義的鉤子行為類之后,我們接下來就要利用這個鉤子行為類促發鉤子的行為了,```鉤子的行為```說白了其實就是促發鉤子行為類的run方法里面的代碼執行,我這里只是簡單的輸出run方法參數的內容,在應用中的,大家可以自由發揮.
PHP編程下面是促發行為的操作:
PHP編程解釋一下:我這里是Home模塊下面的IndexController控制器的登錄方法
PHP編程
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();
}
}
PHP編程下面是login模板內容:
PHP編程
<!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>
PHP編程這里的路徑我就不寫了吧,一般對tp框架了解的人都知道,這個模板login.html放在哪里.
PHP編程關于這個模板的內容,我已經提前把下面要講述的另一種設置鉤子行為類方法的內容也放在這里了,大家可以自行測試一下調用這個模板,如果你跟著我的思路設置了,我想它應該會輸出:
PHP編程
How to used?
我是一條AV廣告,*老師代言
――――――――――――――――分割線1――――――――――――――――――
我是一條MV廣告,蒼井空老師代言
――――――――――――――――分割線2――――――――――――――――――
PHP編程呵呵,這里引用蒼老師的作用,你懂的.
PHP編程廢話不多說,下面是第二種自己設置行為類的方法,這里我是根據tp框架的手冊以及諸位網友的網文自己測試成功了的,大家按照我的思路設置就行了.只有你配置對了,我想應該不會出現太多問題.
PHP編程1、首先在你的模塊下面建一個文件夾Behaviors,再在Behaviors里面創建自定義的鉤子行為類,鉤子行為類必須是xxxBehaviors.class.php的格式.
PHP編程2、其次在你的模塊下面的Conf文件夾中新增一個文件tags.php.
為什么要這樣,這是tp的語法,你照做就行了,當然你自己也可以探究一下.
PHP編程這樣子說或許還不夠形象,下面我還是上代碼吧,本人描述比較差.
PHP編程先截個圖顯示路徑吧,免得有的同學還是摸不著頭腦.
PHP編程
PHP編程解釋一下上面的文件夾,Conf文件夾有的tp會自動生成,有的可能要你新建,Behaviors文件夾則是要你新建的,下面還是上代碼:
PHP編程在Behaviors文件夾里面(完整路徑D:\think\application\Home\Behaviors\testBehavior.class.php)我自定義的鉤子行為類的內容:
PHP編程
<?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'];
}
}
PHP編程在Conf文件夾里面(完整路徑D:\think\application\Home\Conf\tags.php,當然這是我的情況)tags.php的內容:
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')
);
PHP編程解釋一下,上面tags.php文件的內容,我配置了兩個行為標識,``action_begin``,``mv``,是跟login.html那里相對應的,你可以回去仔細查看一下,login.html模板的內容,必定包含有``action_begin``,``mv``,這里也是tp框架在tags.php設置行為標識的語法,要是想問為什么可以自行探究,這里不多說.
PHP編程還有請注意:上面那個被我注釋掉的‘action_begin',其實是我的版本不適合這個語法,這是其他版本在tags.php配置行為標識的語法,這里tp里面的文檔說的比較清楚,我就不多說了.如果,你的版本和我不同,那么請用上面的語法嘗試一下,如果用上面的語法配置還是沒辦法配置成功,那么可能是你配置錯了.
PHP編程配置好了,那么請你再嘗試調用模板login.html.我相信你一定能獲得你想要的配置結果的.
PHP編程這里提醒一句,請認真看我所做的注釋,那里可以說也包含了很多信息.
PHP編程接下來,我要講講設置監聽鉤子行為類的兩個方法hook(),tag():
PHP編程這兩個函數都是tp內置監聽鉤子行為類的內置函數,可以在tp框架的函數庫functions.php文件中找得到.這里只講他們的調用區別,其實已經在login.html模板文件中提到了,這里就再次說明一下:
PHP編程兩個函數在functions.php的代碼:
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);
}
PHP編程之所以在這里展示一下這兩個函數的內容,是為了解釋它們的區別:
PHP編程細心的你應該發現tag函數的$param參數值里前面帶了一個???&???符號,沒有錯:這個符號就是引用變量的地址符號,所以tag函數的$param參數只能是變量,請不要懷疑,你可以測試一下不是變量的情況,呵呵.
PHP編程它們的區別也在于此,hook可以引用任何參數,tag只能引用變量的參數
PHP編程上面那個tags.php文件里面我在每個標簽行為的后面都重復配置了testBehavior自定義類,是為了證明,一個標簽也可以對應多個行為類,如果你配置成功了,那么你運行login.html的時候,肯定發現login根據testBehavior設置的執行了兩次.
PHP編程最后,總結一下:
PHP編程其實,我想說,tp框架的鉤子行為類無非就是為了在某個特定地點,特定時間促發某種行為,這個是應用很廣的,本人姑且這么認為.比如,你想要在某個模板植入廣告,可以向我這樣子簡單的設置.
PHP編程然后,簡單的介紹tp行為的引用步驟:
PHP編程首先第一步,你要先配置好自己的行為類,這是毋庸置疑的.
PHP編程其次是促發的行為,你必須在你自定義的行為類的run里面設置,在這里實現你的任何行為,run方法就是你配置行為的地方.
PHP編程然后,就是配置tags.php的行為標識了,這里你可以按照上面格式配置,當然,你有沒有細心的發現上面的IndexController.class.php里面我多寫了幾行代碼:
PHP編程
//第一個是執行標簽的名稱,第二個參數是行為的類的地址
Hook::add('test', "Home\\Behaviors\\testBehavior");
PHP編程其實這里是動態添加行為標識的代碼,也就是說,鉤子行為的標簽行為,也就是標識也可以動態添加的,你可以試試.
PHP編程最后,就是監聽行為了,監聽行為就是引用tag方法或者hook方法了,在這里你可以傳入參數,也可不傳,看你想怎么做了.監聽行為你可以在模板上監聽,也可以在其他地方監聽,比如控制器的方法中,這里就不舉例了,你可以自己試試,我之所以在模板中舉例,完全是為了看到效果,畢竟做實驗看不到你要的結果,是證明不了你的實驗是個成功的實驗的.
PHP編程多說一句,本人比較粗心,假如有什么 文字錯誤 還請指出,或者自己腦補 ,呵呵.
PHP編程更多關于thinkPHP相關內容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結》、《ThinkPHP常用方法總結》、《smarty模板入門基礎教程》及《PHP模板技術總結》.
PHP編程希望本文所述對大家基于ThinkPHP框架的PHP程序設計有所幫助.
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/2820.html