ThinkPHP行為擴充Behavior應用執行個體詳解,thinkphpbehavior
本文以執行個體的形式詳細介紹了ThinkPHP的行為擴充Behavior的實現方法,有助於讀者更靈活的掌握ThinkPHP的開發,具體步驟如下:
ThinkPHP 行為擴充 (Behavior) 流程:
最先是讀取設定檔資訊:
$mode = include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE.'.php';
讀取設定檔資訊 ThinkPHP\Mode\common.php
// 行為擴充定義'tags' => array('app_init' => array(),'app_begin' => array( 'Behavior\ReadHtmlCache', // 讀取靜態緩衝),'app_end' => array( 'Behavior\ShowPageTrace', // 頁面Trace顯示),'path_info' => array(),'action_begin' => array(),'action_end' => array(),'view_begin' => array(),'view_parse' => array( 'Behavior\ParseTemplate', // 模板解析 支援PHP、內建模板引擎和第三方模板引擎),'template_filter'=> array( 'Behavior\ContentReplace', // 模板輸出替換),'view_filter' => array( 'Behavior\WriteHtmlCache', // 寫入靜態緩衝),'view_end' => array(),),
預設調用了系統行為擴充:靜態緩衝讀取 、頁面Trace顯示輸出、模板解析、模板內容輸出替換、靜態緩衝寫入
// 載入模式行為定義if(isset($mode['tags'])) { Hook::import(is_array($mode['tags'])?$mode['tags']:include $mode['tags']);}// 載入應用行為定義if(is_file(CONF_PATH.'tags.php'))// 允許應用增加開發模式配置定義Hook::import(include CONF_PATH.'tags.php');
分別用Hook去載入 系統行為和自訂行為,並把配置資訊儲存到 Hook 私人屬性$tags中
ThinkPHP\Library\Think\Think.class.php 初始化完成後會調用App::run();
ThinkPHP\Library\Think\App.class.php檔案如下:
/*** 運行應用執行個體 入口檔案使用的快捷方法* @access public* @return void*/static public function run() {// 應用初始化標籤Hook::listen('app_init');App::init();// 應用開始標籤Hook::listen('app_begin');// Session初始化if(!IS_CLI){ session(C('SESSION_OPTIONS'));}// 記錄應用初始化時間G('initTime');App::exec();// 應用結束標籤Hook::listen('app_end');return ;}
可以看出程式在App init之前 通過鉤子去監聽(查看)此動作時是否有需要處理的。迴圈$tags['app_init']擷取類名並通過類名自動執行行為擴充類run方法
所有鉤子如下:
'url_dispatch' // URL調度結束標籤'app_init' // 應用初始化標籤'app_begin' // 應用開始標籤'app_end' // 應用結束標籤'action_begin' // 動作執行前操作'action_end' // 動作執行後操作 'ajax_return' // 用於擴充其他返回格式資料'path_info' // 檢測路由規則 如果沒有則按預設規則調度URL'template_filter' // 模版編譯過濾標籤'view_begin' // 視圖開始標籤'view_end' // 視圖結束標籤'view_parse' // 視圖解析標籤'view_filter' // 內容過濾標籤
缺點如下:
1.順序不可控(設定檔沒有專門的參數去控制順序)如app_init同時有2個監控時先調用哪個方法。
2.監控不是全域監控內部寫的太死只有一些定義好的不能通過設定檔去自動控制每一個操作的鉤子(可能是考慮到效能才沒有加)
優點如下:
1.可以實現了好多行為擴充
2.可以代理檢測、瀏覽器防重新整理檢測、操作路由檢測等
總結:
行為擴充就是在 程式某個操作時去額外的去執行某一特定功能。如程式在操作資料庫 讀的時候 通過explian擷取效能資訊並監測效能瓶頸 如出現擷取資料時超過特定秒數 就把相關資訊email給專案經理等。
thinkphp30中Lib下新增的Widget與Behavior主要是做什的?
Widget擴充用於在頁面根據需要輸出不同的內容,Widget擴充的定義是在項目的Lib\Widget目錄下面定義Widget類庫,詳見ThinkPHP3.0完全開發手冊 13.6 Widget擴充
Behavior則是應用行為類庫,行為擴充首先是定義行為類,然後加入某個標籤位置即可,內建的行為擴充就是一個很好的擴充樣本。行為擴充類繼承內建的行為基礎類Behavior即可,用B方法調用或自動載入,詳見ThinkPHP3.0完全開發手冊 13.1.3 行為擴充。
thinkPHP擴充類怎繼承到Action
方法很簡單了
用自己寫的類繼承 Action 類,然後控制器中繼承 你自己寫的類就可以了
支援人員:論文第9區,為廣大畢業生提供最優秀的畢業作品!
http://www.bkjia.com/PHPjc/844128.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/844128.htmlTechArticleThinkPHP行為擴充Behavior應用執行個體詳解,thinkphpbehavior 本文以執行個體的形式詳細介紹了ThinkPHP的行為擴充Behavior的實現方法,有助於讀者更靈活的掌...