中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在ThinkPHP中對Behavior應用進行擴展

發布時間:2020-12-14 16:10:35 來源:億速云 閱讀:140 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關如何在ThinkPHP中對Behavior應用進行擴展,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

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給項目經理等。

上述就是小編為大家分享的如何在ThinkPHP中對Behavior應用進行擴展了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潍坊市| 靖州| 临高县| 开鲁县| 新和县| 泸水县| 许昌县| 会东县| 偏关县| 鄯善县| 丰都县| 浑源县| 沈丘县| 赤水市| 鄂温| 新晃| 苗栗县| 亚东县| 宜君县| 永德县| 白玉县| 洪江市| 丹凤县| 新丰县| 宜阳县| 虎林市| 东乌珠穆沁旗| 炎陵县| 山东省| 五寨县| 富源县| 宜丰县| 永年县| 徐闻县| 洛浦县| 宜昌市| 青铜峡市| 灯塔市| 贞丰县| 巍山| 大同县|