最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

thinkPHP中鉤子的兩種配置調(diào)用方法詳解

 更新時間:2016年11月11日 11:51:06   作者:循環(huán)源圈  
這篇文章主要介紹了thinkPHP中鉤子的兩種配置調(diào)用方法,結(jié)合實(shí)例形式詳細(xì)分析了thinkPHP中鉤子的功能、配置、調(diào)用方法與使用相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了thinkPHP中鉤子的兩種配置調(diào)用方法。分享給大家供大家參考,具體如下:

thinkphp的鉤子行為類是一個比較難以理解的問題,網(wǎng)上有很多寫thinkphp鉤子類的文章,我也是根據(jù)網(wǎng)上的文章來設(shè)置thinkphp的鉤子行為的,但根據(jù)這些網(wǎng)上的文章,我在設(shè)置的過程中,嘗試了十幾次都沒有成功,不過,我還是沒有放棄,最后還是在一邊調(diào)節(jié)細(xì)節(jié),一邊試驗(yàn)的過程中實(shí)現(xiàn)了鉤子行為的設(shè)置。下面是我個人的設(shè)置經(jīng)驗(yàn),在這里跟大家分享一下。

個人做了兩種設(shè)置,都試驗(yàn)成功了,一個簡單點(diǎn),在thinkphp的核心文件中模仿核心行為類添加了另一個行為類,下面是截圖:

我的虛擬主機(jī)配置文件夾是D:/think

Thinkphp是tp框架文件夾,配置過tp框架應(yīng)該都知道Library是tp放核心文件的文件夾,Behavior文件夾則是tp的鉤子行為類文件的核心文件夾,里面放置著很多行為類文件,我只是模仿這些鉤子行為類文件在里面建了一個鉤子行為類文件adBehavior.class.php,內(nèi)容如下:

<?php
namespace Behavior;
class adBehavior{
  function run($arg){
//在此介紹下,run必須的 ,細(xì)心的會在Think核心找到Behavior.class.php里面有這樣一句話 abstract public function run(&$params);
    echo '我是一條'.$arg['name'].'廣告,'.$arg['value'].'代言';
  }
}

設(shè)置好了自定義的鉤子行為類之后,我們接下來就要利用這個鉤子行為類促發(fā)鉤子的行為了,```鉤子的行為```說白了其實(shí)就是促發(fā)鉤子行為類的run方法里面的代碼執(zhí)行,我這里只是簡單的輸出run方法參數(shù)的內(nèi)容,在應(yīng)用中的,大家可以自由發(fā)揮。

下面是促發(fā)行為的操作:

解釋一下:我這里是Home模塊下面的IndexController控制器的登錄方法

namespace Home\Controller;
use Think\Controller;
use Think\Hook;//引進(jìn)促發(fā)鉤子行為的類,是為下面的Hook::add()調(diào)用做伏筆的
class IndexController extends Controller {
  public function login(){
    //這里我設(shè)置一個ad行為的標(biāo)簽,也就是給我自定義的adBehavior鉤子行為類添加一個促發(fā)行為的標(biāo)識
    Hook::add('ad','Behavior\\adBehavior');
    //第一個是執(zhí)行標(biāo)簽的名稱,第二個參數(shù)是行為的類的地址
    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模板內(nèi)容:

<!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)擴(kuò)展以及插件(Plug or Hook)詳解(含實(shí)例)
  </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函數(shù)第一個參數(shù)是標(biāo)簽的名稱,第二個參數(shù)隨意-->
  <!--tag函數(shù)第一個參數(shù)是標(biāo)簽的名稱,第二個一定是變量,因?yàn)閠ag函數(shù)是引址傳遞的參數(shù)-->
<div>hook函數(shù):{:hook('test', array('name'=>'World'))}<hr/></div>
<div>tag函數(shù):{:tag('mv',$param)}<hr/></div>
<hr/>
<div>tag函數(shù):{:tag('action_begin',$param)}</div>
</body>
</html>

這里的路徑我就不寫了吧,一般對tp框架了解的人都知道,這個模板login.html放在哪里。

關(guān)于這個模板的內(nèi)容,我已經(jīng)提前把下面要講述的另一種設(shè)置鉤子行為類方法的內(nèi)容也放在這里了,大家可以自行測試一下調(diào)用這個模板,如果你跟著我的思路設(shè)置了,我想它應(yīng)該會輸出:

How to used?
我是一條AV廣告,*老師代言

————————————————分割線1——————————————————
我是一條MV廣告,蒼井空老師代言
————————————————分割線2——————————————————

呵呵,這里引用蒼老師的作用,你懂的。

廢話不多說,下面是第二種自己設(shè)置行為類的方法,這里我是根據(jù)tp框架的手冊以及諸位網(wǎng)友的網(wǎng)文自己測試成功了的,大家按照我的思路設(shè)置就行了。只有你配置對了,我想應(yīng)該不會出現(xiàn)太多問題。

1、首先在你的模塊下面建一個文件夾Behaviors,再在Behaviors里面創(chuàng)建自定義的鉤子行為類,鉤子行為類必須是xxxBehaviors.class.php的格式。

2、其次在你的模塊下面的Conf文件夾中新增一個文件tags.php。
為什么要這樣,這是tp的語法,你照做就行了,當(dāng)然你自己也可以探究一下。

這樣子說或許還不夠形象,下面我還是上代碼吧,本人描述比較差。

先截個圖顯示路徑吧,免得有的同學(xué)還是摸不著頭腦。

解釋一下上面的文件夾,Conf文件夾有的tp會自動生成,有的可能要你新建,Behaviors文件夾則是要你新建的,下面還是上代碼:

在Behaviors文件夾里面(完整路徑D:\think\application\Home\Behaviors\testBehavior.class.php)我自定義的鉤子行為類的內(nèi)容:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016/7/17
 * Time: 11:02
 */
namespace Home\Behaviors;
/*
 * 注冊鉤子行為類,要觸發(fā)的行為寫在run函數(shù)里
 * */
class testBehavior extends \Think\Behavior{
  public function run(&$arg){
    echo 'test behavior=====下一行是參數(shù)<br/>'.$arg['name'];
  }
}

在Conf文件夾里面(完整路徑D:\think\application\Home\Conf\tags.php,當(dāng)然這是我的情況)tags.php的內(nèi)容:

<?php
/**
 * Created by zhuowenfeng.
 * User: Administrator
 * Date: 2016/7/17
 * Time: 10:56
 */
return array(
//'action_begin'=>array('Home\\Behaviors\\test','Home\\Behaviors\\test'),
  //一個標(biāo)簽位可以有多個行為,使用數(shù)組即可。
  // 如果是3.2.1版本 則需要改成
  'action_begin'=>array('Home\\Behaviors\\testBehavior','Home\\Behaviors\\testBehavior'),
  'mv'=>array('Home\\Behaviors\\mvBehavior','Home\\Behaviors\\mvBehavior')
);

解釋一下,上面tags.php文件的內(nèi)容,我配置了兩個行為標(biāo)識,``action_begin``,``mv``,是跟login.html那里相對應(yīng)的,你可以回去仔細(xì)查看一下,login.html模板的內(nèi)容,必定包含有``action_begin``,``mv``,這里也是tp框架在tags.php設(shè)置行為標(biāo)識的語法,要是想問為什么可以自行探究,這里不多說。

還有請注意:上面那個被我注釋掉的‘a(chǎn)ction_begin',其實(shí)是我的版本不適合這個語法,這是其他版本在tags.php配置行為標(biāo)識的語法,這里tp里面的文檔說的比較清楚,我就不多說了。如果,你的版本和我不同,那么請用上面的語法嘗試一下,如果用上面的語法配置還是沒辦法配置成功,那么可能是你配置錯了。

配置好了,那么請你再嘗試調(diào)用模板login.html。我相信你一定能獲得你想要的配置結(jié)果的。

這里提醒一句,請認(rèn)真看我所做的注釋,那里可以說也包含了很多信息。

接下來,我要講講設(shè)置監(jiān)聽鉤子行為類的兩個方法hook(),tag():

這兩個函數(shù)都是tp內(nèi)置監(jiān)聽鉤子行為類的內(nèi)置函數(shù),可以在tp框架的函數(shù)庫functions.php文件中找得到。這里只講他們的調(diào)用區(qū)別,其實(shí)已經(jīng)在login.html模板文件中提到了,這里就再次說明一下:

兩個函數(shù)在functions.php的代碼:

/**
 * 獲取和設(shè)置配置參數(shù) 支持批量定義
 * @param string|array $name 配置變量
 * @param mixed $value 配置值
 * @param mixed $default 默認(rèn)值
 * @return mixed
 */
function hook($hook,$params=array()){
  \Think\Hook::listen($hook,$params); //監(jiān)聽一個鉤子
}
/**
 * 處理標(biāo)簽擴(kuò)展
 * @param string $tag 標(biāo)簽名稱
 * @param mixed $params 傳入?yún)?shù)
 * @return void
 */
function tag($tag, &$params=NULL) {
  \Think\Hook::listen($tag,$params);
}

之所以在這里展示一下這兩個函數(shù)的內(nèi)容,是為了解釋它們的區(qū)別:

細(xì)心的你應(yīng)該發(fā)現(xiàn)tag函數(shù)的$param參數(shù)值里前面帶了一個···&···符號,沒有錯:這個符號就是引用變量的地址符號,所以tag函數(shù)的$param參數(shù)只能是變量,請不要懷疑,你可以測試一下不是變量的情況,呵呵。

它們的區(qū)別也在于此,hook可以引用任何參數(shù),tag只能引用變量的參數(shù)

上面那個tags.php文件里面我在每個標(biāo)簽行為的后面都重復(fù)配置了testBehavior自定義類,是為了證明,一個標(biāo)簽也可以對應(yīng)多個行為類,如果你配置成功了,那么你運(yùn)行l(wèi)ogin.html的時候,肯定發(fā)現(xiàn)login根據(jù)testBehavior設(shè)置的執(zhí)行了兩次。

最后,總結(jié)一下:

其實(shí),我想說,tp框架的鉤子行為類無非就是為了在某個特定地點(diǎn),特定時間促發(fā)某種行為,這個是應(yīng)用很廣的,本人姑且這么認(rèn)為。比如,你想要在某個模板植入廣告,可以向我這樣子簡單的設(shè)置。

然后,簡單的介紹tp行為的引用步驟:

首先第一步,你要先配置好自己的行為類,這是毋庸置疑的。

其次是促發(fā)的行為,你必須在你自定義的行為類的run里面設(shè)置,在這里實(shí)現(xiàn)你的任何行為,run方法就是你配置行為的地方。

然后,就是配置tags.php的行為標(biāo)識了,這里你可以按照上面格式配置,當(dāng)然,你有沒有細(xì)心的發(fā)現(xiàn)上面的IndexController.class.php里面我多寫了幾行代碼:

//第一個是執(zhí)行標(biāo)簽的名稱,第二個參數(shù)是行為的類的地址
Hook::add('test', "Home\\Behaviors\\testBehavior");

其實(shí)這里是動態(tài)添加行為標(biāo)識的代碼,也就是說,鉤子行為的標(biāo)簽行為,也就是標(biāo)識也可以動態(tài)添加的,你可以試試。

最后,就是監(jiān)聽行為了,監(jiān)聽行為就是引用tag方法或者h(yuǎn)ook方法了,在這里你可以傳入?yún)?shù),也可不傳,看你想怎么做了。監(jiān)聽行為你可以在模板上監(jiān)聽,也可以在其他地方監(jiān)聽,比如控制器的方法中,這里就不舉例了,你可以自己試試,我之所以在模板中舉例,完全是為了看到效果,畢竟做實(shí)驗(yàn)看不到你要的結(jié)果,是證明不了你的實(shí)驗(yàn)是個成功的實(shí)驗(yàn)的。

多說一句,本人比較粗心,假如有什么 文字錯誤 還請指出,或者自己腦補(bǔ) ,呵呵。

更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《smarty模板入門基礎(chǔ)教程》及《PHP模板技術(shù)總結(jié)》。

希望本文所述對大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • laravel框架之?dāng)?shù)據(jù)庫查出來的對象實(shí)現(xiàn)轉(zhuǎn)化為數(shù)組

    laravel框架之?dāng)?shù)據(jù)庫查出來的對象實(shí)現(xiàn)轉(zhuǎn)化為數(shù)組

    今天小編就為大家分享一篇laravel框架之?dāng)?shù)據(jù)庫查出來的對象實(shí)現(xiàn)轉(zhuǎn)化為數(shù)組,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • PHP實(shí)現(xiàn)數(shù)據(jù)庫的增刪查改功能及完整代碼

    PHP實(shí)現(xiàn)數(shù)據(jù)庫的增刪查改功能及完整代碼

    這篇文章主要介紹了PHP實(shí)現(xiàn)數(shù)據(jù)庫的增刪查改功能及完整代碼,需要的朋友可以參考下
    2018-04-04
  • Yii框架安裝簡明教程

    Yii框架安裝簡明教程

    這篇文章主要介紹了Yii框架安裝方法,總結(jié)分析了Yii框架安裝的基本步驟、命令與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • 一個簡單的PHP驗(yàn)證碼實(shí)現(xiàn)代碼

    一個簡單的PHP驗(yàn)證碼實(shí)現(xiàn)代碼

    為提高網(wǎng)站安全性,登陸采用驗(yàn)證碼是必不可少的。一款簡單精致的PHP驗(yàn)證碼應(yīng)運(yùn)而生!此驗(yàn)證碼簡潔美觀,源碼簡單,可以自定義修改樣式,是一款不錯的驗(yàn)證碼。
    2014-05-05
  • 初識ThinkPHP控制器

    初識ThinkPHP控制器

    這篇文章主要帶大家了解ThinkPHP控制器的基本定義、基本操作,配置ACTION_SUFFIX,感興趣的小伙伴們可以參考一下
    2016-04-04
  • thinkphp3.2.2前后臺公用類架構(gòu)問題分析

    thinkphp3.2.2前后臺公用類架構(gòu)問題分析

    這篇文章主要介紹了thinkphp3.2.2前后臺公用類架構(gòu)問題,以實(shí)例形式較為詳細(xì)的分析了前后臺公用類的簡單調(diào)用方法,非常具有實(shí)用價值,需要的朋友可以參考下
    2014-11-11
  • PHP處理Ajax請求與Ajax跨域問題

    PHP處理Ajax請求與Ajax跨域問題

    這篇文章主要介紹了PHP處理Ajax請求與Ajax跨域問題的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • PHP中圖片等比縮放的實(shí)例

    PHP中圖片等比縮放的實(shí)例

    PHP中圖片等比縮放的實(shí)例,需要的朋友可以參考一下
    2013-03-03
  • Laravel學(xué)習(xí)教程之View模塊詳解

    Laravel學(xué)習(xí)教程之View模塊詳解

    這篇文章主要給大家介紹了關(guān)于Laravel學(xué)習(xí)教程之View模塊的相關(guān)資料,文中通過示例代碼將View模塊介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 基于ThinkPHP5.0實(shí)現(xiàn)圖片上傳插件

    基于ThinkPHP5.0實(shí)現(xiàn)圖片上傳插件

    thinkphp5.0 圖片上傳插件可預(yù)覽裁剪圖片和保存原圖片,執(zhí)行裁剪圖片后會刪除 裁剪的原圖片目錄,以便減少空間。具體實(shí)現(xiàn)代碼大家參考下本文
    2017-09-09

最新評論

齐齐哈尔市| 清水县| 南投市| 博白县| 辽中县| 彰武县| 南京市| 临汾市| 中卫市| 临洮县| 咸丰县| 克什克腾旗| 芜湖县| 抚顺市| 扬州市| 舟曲县| 宜城市| 富锦市| 思茅市| 仪征市| 平塘县| 昌乐县| 麻栗坡县| 宁都县| 青海省| 萝北县| 盈江县| 横峰县| 定边县| 松原市| 申扎县| 兴城市| 石城县| 新邵县| 甘德县| 石景山区| 雷州市| 榕江县| 西乌珠穆沁旗| 通渭县| 天镇县|