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

CodeIgniter鉤子用法實(shí)例詳解

 更新時(shí)間:2016年01月20日 11:40:54   作者:老彭  
這篇文章主要介紹了CodeIgniter鉤子用法,分析說(shuō)明了CodeIgniter中鉤子的概念并結(jié)合實(shí)例形式演示了鉤子的使用技巧,需要的朋友可以參考下

本文實(shí)例講述了CodeIgniter鉤子用法。分享給大家供大家參考,具體如下:

CodeIgniter執(zhí)行流程圖中有7個(gè)橢圓的框,這表示在執(zhí)行的過(guò)程中埋了7個(gè)鉤子。那先來(lái)看看什么是鉤子?

網(wǎng)上找到的兩段文字:

鉤子的完整實(shí)現(xiàn)應(yīng)該叫事件驅(qū)動(dòng)。事件驅(qū)動(dòng)分為兩個(gè)階段,第一個(gè)階段是注冊(cè)事件,目的是給未來(lái)可能發(fā)生的“事件”起一個(gè)名字,簡(jiǎn)單的實(shí)現(xiàn)方法是用單例模式產(chǎn)生一個(gè)持久的對(duì)象或者注冊(cè)一個(gè)全局變量,然后將事件名稱,以及該事件對(duì)應(yīng)的類(lèi)與方法插入全局變量即可。也就是掛載一個(gè)鉤子。

第二個(gè)階段是觸發(fā)事件,本質(zhì)上就是在事件的全局變量中查詢要觸發(fā)的事件名稱,然后找到注冊(cè)好的類(lèi)與方法,實(shí)例化并運(yùn)行。這樣子就可以擺脫傳統(tǒng)方式中程序必須按順序的規(guī)則,進(jìn)一步實(shí)現(xiàn)解除耦合的目的。

鉤子函數(shù)可以截獲并處理其他應(yīng)用程序的消息。每當(dāng)特定的消息發(fā)出,在沒(méi)有到達(dá)目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數(shù)先得到控制權(quán)。這時(shí)鉤子函數(shù)即可以加工處理(改變)該消息,也可以不作處理而繼續(xù)傳遞該消息,還可以強(qiáng)制結(jié)束消息的傳遞。

可以看到:

1、鉤子函數(shù)是預(yù)設(shè)并在特定的條件下觸發(fā)的。

2、鉤子函數(shù)接管程序后可以影響到程序的走向。

CI預(yù)設(shè)鉤子

CI中設(shè)定了7個(gè)鉤子,鉤子與鉤子之間相對(duì)獨(dú)立。前3個(gè)鉤子是在實(shí)例化之前設(shè)定的,意味著無(wú)法使用get_instance實(shí)例,要使用已實(shí)例化的類(lèi)需要global。7個(gè)鉤子的作用手冊(cè)上說(shuō)的比較清楚了,可以重寫(xiě)緩存輸出、可以對(duì)輸出進(jìn)行處理等。

如何觸發(fā)CI鉤子?

CI在配置文件中設(shè)置了鉤子開(kāi)關(guān),要使用鉤子首先得打開(kāi)該開(kāi)關(guān),然后配置config/hook.php中的hook數(shù)組,比如設(shè)置post_controller_constructor鉤子:

$hook['post_controller_constructor'] = array(
  'class'  => 'Hook',
  'function' => 'post_controller_constructor',
  'filename' => 'Hook.php',
  'filepath' => 'hooks',
  'params'  => array('beer', 'wine', 'snacks')
);

當(dāng)控制器實(shí)例化之后,調(diào)用action之前就會(huì)觸發(fā)去執(zhí)行hooks目錄下的Hook.php中的post_controller_constructor方法。我們可以在該方法中做一些處理。

鉤子的應(yīng)用

到目前為止還未體會(huì)到CI鉤子的絕妙之處,查看網(wǎng)上有一些應(yīng)用CI鉤子來(lái)實(shí)現(xiàn)權(quán)限控制的程序,即在post_controller_constructor做權(quán)限判斷,由于這個(gè)鉤子就好比一個(gè)構(gòu)造函數(shù),在構(gòu)造函數(shù)里判斷接下來(lái)要執(zhí)行的方法是否有權(quán)限,確實(shí)可行。但這個(gè)功能也完全可以放在MY_Controller中去實(shí)現(xiàn),甚至?xí)?。因?yàn)镃I的鉤子是全局的,不管是前臺(tái)還是后臺(tái)都會(huì)啟動(dòng)該鉤子,雖然說(shuō)這個(gè)鉤子程序可以做判斷,但這里判斷不一定是最好的。前面提到過(guò)MY_Controller中不同模塊公用控制器分開(kāi),前臺(tái)后臺(tái)繼承不同的控制器,如果我只需要對(duì)后臺(tái)進(jìn)行權(quán)限控制,完全可以直接在后臺(tái)公用控制器中來(lái)實(shí)現(xiàn),不影響到前臺(tái),只對(duì)需要的部分做控制。

這里有個(gè)非CI中的例子,思維是一樣的。合作渠道的用戶登錄注冊(cè)功能,有很多的合作方,不同的合作方需要注冊(cè)的基本資料相同,但每個(gè)合作方可能會(huì)有一些特殊的字段或者不同的校驗(yàn)方式。

很多時(shí)候碰到問(wèn)題我們都可以放到日常生活中來(lái)看。以注冊(cè)處理邏輯為例,可以看看其中有個(gè)流程是不變的。接受參數(shù)->注冊(cè)資料之前處理->注冊(cè)->注冊(cè)資料之后處理。變化的是什么?每一步都可能變化,但流程不變化。所以可以對(duì)前、后、處理等相關(guān)地方設(shè)置鉤子,把處理的邏輯分發(fā)到特定的情況下去,下面有個(gè)參考圖,具體的如何設(shè)置鉤子還需要根據(jù)項(xiàng)目來(lái):

事實(shí)也證明這種方式是可行的,合作方雖然很多,但是也可以分組,上百個(gè)注冊(cè)頁(yè)面很容易就實(shí)現(xiàn)了。所以利用鉤子處理這種流程不變,而中間的某個(gè)步驟變化多端的需求是很方便的。

簡(jiǎn)單點(diǎn)說(shuō), 鉤子就是特定條件下執(zhí)行一段程序;再簡(jiǎn)單點(diǎn),鉤子就是實(shí)現(xiàn)解除if判斷的一種方式。

過(guò)多的if判斷會(huì)導(dǎo)致程序難以閱讀和維護(hù),而通過(guò)鉤子的處理可以讓程序更靈活。鉤子有一定的觸發(fā)條件,條件可以是配置、從數(shù)據(jù)庫(kù)讀取,或者通過(guò)一些技術(shù)來(lái)實(shí)現(xiàn),比如反射等,使用鉤子可以達(dá)到解耦的目的。

更多關(guān)于CodeIgniter相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《codeigniter入門(mén)教程》和《CI(CodeIgniter)框架進(jìn)階教程

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

相關(guān)文章

  • 基于PHP實(shí)現(xiàn)微信小程序客服消息功能

    基于PHP實(shí)現(xiàn)微信小程序客服消息功能

    本項(xiàng)目是一個(gè)簡(jiǎn)單微信小程序客服消息類(lèi),實(shí)現(xiàn)客服消息相關(guān)功能。本示例是采用開(kāi)發(fā)者服務(wù)器,沒(méi)有采用云調(diào)用的形式。具體實(shí)例代碼大家跟隨小編一起看看吧
    2019-08-08
  • ThinkPHP處理Ajax返回的方法

    ThinkPHP處理Ajax返回的方法

    這篇文章主要介紹了ThinkPHP處理Ajax返回的方法,簡(jiǎn)單講述了在ThinkPHP中Ajax的用法及對(duì)應(yīng)的處理Ajax返回值的方法,具有不錯(cuò)的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-11-11
  • YII框架模塊化處理操作示例

    YII框架模塊化處理操作示例

    這篇文章主要介紹了YII框架模塊化處理操作,結(jié)合實(shí)例形式分析了Yii框架模塊化操作實(shí)現(xiàn)方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2019-04-04
  • PHP中如何防止外部惡意提交調(diào)用ajax接口

    PHP中如何防止外部惡意提交調(diào)用ajax接口

    本文簡(jiǎn)單介紹如何防止外部惡意調(diào)用ajax接口,以達(dá)到節(jié)省流量,減輕服務(wù)器壓力的目的。
    2016-04-04
  • php中的boolean(布爾)類(lèi)型詳解

    php中的boolean(布爾)類(lèi)型詳解

    本文是對(duì)php中的boolean(布爾)類(lèi)型進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-10-10
  • phpcms中的評(píng)論樣式修改方法

    phpcms中的評(píng)論樣式修改方法

    phpcms中自帶的評(píng)論插件很好用,但是樣式不太好看,今天小編給大家分享兩種關(guān)于phpcms中的評(píng)論樣式修改方法,一起看看吧
    2016-10-10
  • codeigniter框架批量插入數(shù)據(jù)

    codeigniter框架批量插入數(shù)據(jù)

    本文介紹codeigniter框架批量插入數(shù)據(jù)的實(shí)例,優(yōu)化了其中的插入算法,大家參考使用吧
    2014-01-01
  • Zend Framework框架中實(shí)現(xiàn)Ajax的方法示例

    Zend Framework框架中實(shí)現(xiàn)Ajax的方法示例

    這篇文章主要介紹了Zend Framework框架中實(shí)現(xiàn)Ajax的方法,結(jié)合實(shí)例形式詳細(xì)分析了Zend Framework框架中實(shí)現(xiàn)ajax功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • laravel 多圖上傳及圖片的存儲(chǔ)例子

    laravel 多圖上傳及圖片的存儲(chǔ)例子

    今天小編就為大家分享一篇laravel 多圖上傳及圖片的存儲(chǔ)例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • php實(shí)現(xiàn)給一張圖片加上水印效果

    php實(shí)現(xiàn)給一張圖片加上水印效果

    本文給大家匯總了2個(gè)php實(shí)現(xiàn)給圖片加水印的功能,第一個(gè)比較簡(jiǎn)單易懂,第二個(gè)功能強(qiáng)大些,而且給大家封裝了起來(lái),有需要的小伙伴可以參考下
    2016-01-01

最新評(píng)論

四会市| 轮台县| 重庆市| 武清区| 天津市| 绥芬河市| 秭归县| 长白| 阿克苏市| 鲁甸县| 沙雅县| 吉木萨尔县| 唐海县| 卢湾区| 亚东县| 海南省| 北流市| 斗六市| 鄯善县| 洪洞县| 天门市| 云霄县| 庆安县| 萝北县| 肇庆市| 当涂县| 高淳县| 顺平县| 高要市| 清水河县| 团风县| 大兴区| 务川| 甘肃省| 松原市| 遂溪县| 肃宁县| 炎陵县| 镶黄旗| 舞钢市| 静宁县|