一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

ThinkPHP應(yīng)用模式擴展詳解

Thinkphp應(yīng)用模式使得開發(fā)人員對核心框架進行改造較以往更為得心應(yīng)手,并且可以讓你的應(yīng)用適應(yīng)更多的環(huán)境和不同的需求。每個應(yīng)用模式都有自己的模式定義文件,相對于Thinkphp3.1版本,Thinkphp3.2版本對應(yīng)用模式的擴展更加明確和清晰,在Thinkphp3.1版本中定義了Cli、Lite、Thin、AMF、phpRPC、REST模式,其定義方式和Thinkphp3.2版本的方式大同小異,如有需要可以參考修改,其中Cli模式被Thinkphp框架內(nèi)置,不用單獨定義Cli模式即可正常使用,如需要更細(xì)化調(diào)整可以參考3.1版編寫的Cli運行模式擴展。Thinkphp同樣提供了便捷的開發(fā)環(huán)境和正式環(huán)境的模式切換方式。讓我們隨著Thinkphp的運行流程解析其應(yīng)用模式擴展之謎。

一、應(yīng)用模式的使用

在研究應(yīng)用模式擴展之前,看看如何使用應(yīng)用模式的吧。一般通過在入口文件定義常量APP_MODE為應(yīng)用模式名稱,但是在分析Thinkphp框架入口文件時,了解到框架默認(rèn)采用模式為普通模式(common),而且可以自動識別sae環(huán)境,當(dāng)然前提是沒有定義APP_MODE常量時,當(dāng)然Thinkphp可以自動識別CLI和CGI模式,并且在CLI和CGI環(huán)境下運行Thinkphp框架在默認(rèn)模式中自動對這兩種環(huán)境做了細(xì)微調(diào)整,當(dāng)然也可以自己擴展這兩種應(yīng)用模式。

if(function_exists('saeAutoLoader')){// 自動識別SAE環(huán)境  defined('APP_MODE')   or define('APP_MODE',   'sae');  defined('STORAGE_TYPE') or define('STORAGE_TYPE', 'Sae');}else{  defined('APP_MODE')   or define('APP_MODE',    'common'); // 應(yīng)用模式 默認(rèn)為普通模式    defined('STORAGE_TYPE') or define('STORAGE_TYPE',  'File'); // 存儲類型 默認(rèn)為File  }

二、應(yīng)用模式定義

在Thinkphp框架當(dāng)中除了Thinkphp框架入口和框架引導(dǎo)類以外,基本所有其他功能都可以通過應(yīng)用模式進行更改和擴展,如果我們要增加一個應(yīng)用模式,只需要在Thinkphp/Mode目錄下面定義一個模式定義文件即可,我們可以通過分析common模式進行學(xué)習(xí)。該文件的代碼如下:

//文件路徑:Thinkphp/Mode/common.php/** * Thinkphp 普通模式定義 * 定義一個模式文件,只需要返回一個模式包含文件的數(shù)組即可 * 在數(shù)組中主要包含4種擴展文件列表: *   config 為默認(rèn)加載配置文件列表 *   alias 為核心類庫別名配置列表 *   core 需要加載的核心函數(shù)和類文件列表 *   tags 行為配置列表 * * 如果在應(yīng)用模式定義中加載一個自定類,那個自定義類的命名空間必須是Think */return array(  // 配置文件  'config'  => array(    THINK_PATH.'Conf/convention.php',  // 系統(tǒng)慣例配置    CONF_PATH.'config.php',   // 應(yīng)用公共配置  ),   // 別名定義  'alias'   => array(    'Think/Log'        => CORE_PATH . 'Log'.EXT,    'Think/Log/Driver/File'  => CORE_PATH . 'Log/Driver/File'.EXT,    'Think/Exception'     => CORE_PATH . 'Exception'.EXT,    'Think/Model'       => CORE_PATH . 'Model'.EXT,    'Think/Db'        => CORE_PATH . 'Db'.EXT,    'Think/Template'     => CORE_PATH . 'Template'.EXT,    'Think/Cache'       => CORE_PATH . 'Cache'.EXT,    'Think/Cache/Driver/File' => CORE_PATH . 'Cache/Driver/File'.EXT,    'Think/Storage'      => CORE_PATH . 'Storage'.EXT,  ),   // 函數(shù)和類文件  'core'   => array(    THINK_PATH.'Common/functions.php',    COMMON_PATH.'Common/function.php',    CORE_PATH . 'Hook'.EXT,    CORE_PATH . 'App'.EXT,    CORE_PATH . 'Dispatcher'.EXT,    //CORE_PATH . 'Log'.EXT,    CORE_PATH . 'Route'.EXT,    CORE_PATH . 'Controller'.EXT,    CORE_PATH . 'View'.EXT,    BEHAVIOR_PATH . 'BuildLiteBehavior'.EXT,    BEHAVIOR_PATH . 'ParseTemplateBehavior'.EXT,    BEHAVIOR_PATH . 'ContentReplaceBehavior'.EXT,  ),  // 行為擴展定義  'tags' => array(    'app_init'   => array(      'Behavior/BuildLiteBehavior', // 生成運行Lite文件    ),        'app_begin'   => array(      'Behavior/ReadHtmlCacheBehavior', // 讀取靜態(tài)緩存    ),    'app_end'    => array(      'Behavior/ShowPageTraceBehavior', // 頁面Trace顯示    ),    'view_parse'  => array(      'Behavior/ParseTemplateBehavior', // 模板解析 支持php、內(nèi)置模板引擎和第三方模板引擎    ),    'template_filter'=> array(      'Behavior/ContentReplaceBehavior', // 模板輸出替換    ),    'view_filter'  => array(      'Behavior/WriteHtmlCacheBehavior', // 寫入靜態(tài)緩存    ),  ),);

我們看到這個普通應(yīng)用模式代碼之后,有點明了Thinkphp應(yīng)用模式擴展是怎么回事了,但是還是知其然而不知其所以然,定義一個加載文件列表和配置是如何改變框架核心的呢?秘密就在Thinkphp引導(dǎo)類中,讓我們再回顧以下吧!

//判斷是否存在core.php配置文件(這是開發(fā)環(huán)境臨時定義的運行模式,我是這么理解的)     //否者加載APP_MODE定義的模式文件     $mode  =  include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE.'.php';     //加載模式中core定義的核心文件列表     foreach ($mode['core'] as $file){       if(is_file($file)) {        include $file;        if(!APP_DEBUG) $content  .= compile($file);       }     }      //加載模式中定義的config配置文件列表     foreach ($mode['config'] as $key=>$file){       is_numeric($key)?C(include $file):C($key,include $file);     }      // 讀取當(dāng)前應(yīng)用模式對應(yīng)的配置文件     if('common' != APP_MODE && is_file(CONF_PATH.'config_'.APP_MODE.'.php'))       C(include CONF_PATH.'config_'.APP_MODE.'.php');       // 加載模式中alias別名列表定義     if(isset($mode['alias'])){       self::addMap(is_array($mode['alias'])?$mode['alias']:include $mode['alias']);     }      // 加載應(yīng)用別名定義文件     if(is_file(CONF_PATH.'alias.php'))       self::addMap(include CONF_PATH.'alias.php');      // 加載模式中tags行為定義     if(isset($mode['tags'])) {       Hook::import(is_array($mode['tags'])?$mode['tags']:include $mode['tags']);     }      // 加載應(yīng)用行為定義     if(is_file(CONF_PATH.'tags.php'))       // 允許應(yīng)用增加開發(fā)模式配置定義       Hook::import(include CONF_PATH.'tags.php');       // 加載框架底層語言包     L(include THINK_PATH.'Lang/'.strtolower(C('DEFAULT_LANG')).'.php');

通過Thinkphp::start()中的這段代碼,完美無縫關(guān)聯(lián)的模式定義文件的意義與實現(xiàn)方法。

三、定義簡單的運行模式

手冊中有一個模式擴展到的實例,可以拿到這里來分析一下,定義一個lite簡潔運行模式,首先在Thinkphp/Mode目錄下新建一個lite.php文件內(nèi)容定義如下:

return array(  // 配置文件 'config'  => array(        THINK_PATH.'Conf/convention.php',   // 系統(tǒng)慣例配置        CONF_PATH.'config.php',   // 應(yīng)用公共配置  ),  // 別名定義   'alias'   => array(       'Think/Exception'     => CORE_PATH . 'Exception'.EXT,       'Think/Model'       => CORE_PATH . 'Model'.EXT,        'Think/Db'        => CORE_PATH . 'Db'.EXT,       'Think/Cache'       => CORE_PATH . 'Cache'.EXT,       'Think/Cache/Driver/File' => CORE_PATH . 'Cache/Driver/File'.EXT,       'Think/Storage'      => CORE_PATH . 'Storage'.EXT, ),  // 函數(shù)和類文件  'core'   => array(       MODE_PATH.'Lite/functions.php',        COMMON_PATH.'Common/function.php',       MODE_PATH . 'Lite/App'.EXT,        MODE_PATH . 'Lite/Dispatcher'.EXT,        MODE_PATH . 'Lite/Controller'.EXT,       MODE_PATH . 'Lite/View'.EXT,       CORE_PATH . 'Behavior'.EXT, ),  // 行為擴展定義   'tags' => array(       'view_parse'  => array(           'Behavior/ParseTemplate', // 模板解析 支持php、內(nèi)置模板引擎和第三方模板引擎        ),        'template_filter'=> array(           'Behavior/ContentReplace', // 模板輸出替換        ), ),);

從上面的配置當(dāng)中我們發(fā)現(xiàn)core中的核心文件大多數(shù)都被替換了,當(dāng)然這些需要被替換的程序功能需要我們自己去實現(xiàn),不過建議大家直接拷貝普通模式中定義的核心文件過來修改。接下來我們來實現(xiàn)以下Thinkphp應(yīng)用開發(fā)中的核心類庫擴展文件App.class.php

在Thinkphp/Mode目錄下建立一個Lite目錄并在lite目錄下建立App.class.php文件,以下是程序文件的實現(xiàn):

//模式擴展類庫必須是Think命名空間namespace Think; /** * Thinkphp 應(yīng)用程序類 執(zhí)行應(yīng)用過程管理 Lite模式擴展類 * 實現(xiàn)Thinkphp核心類庫擴展時,盡可能仿造原有類庫實現(xiàn)(除非對Thinkphp框架源碼特別了解) * 因為在其他沒有擴展的核心文件中可能會調(diào)用擴展的核心類文件中的某個方法,除非你打算全部擴展 */class App{/** * 應(yīng)用程序初始化 * @access public * @return void */static public function init() {    //具體現(xiàn)實} /** * 執(zhí)行應(yīng)用程序 * @access public * @return void */static public function exec() {    //具體實現(xiàn)} /** * 運行應(yīng)用實例 入口文件使用的快捷方法 * @access public * @return void */static public function run() {    //具體實現(xiàn)} static public function logo(){    //具體實現(xiàn)}}

當(dāng)文件所有擴展文件的實現(xiàn)后,可以在框架入口文件定義APP_MODE常量為lite

另外需要注意一點,手冊當(dāng)中要求定義的MODE_NAME常量來改變運行模式是之前3.1版本中定義運行模式的方法,使用新版本的用戶對此需要注意。

php技術(shù)ThinkPHP應(yīng)用模式擴展詳解,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 992tv又爽又黄的免费视频 | 国产人成精品综合欧美成人 | 91精品国产91热久久久久福利 | 91视频免费观看网站 | 狠狠干一区 | 成人一区视频 | 精品一区二区三区视频在线观看免 | 国产精品国产午夜免费福利看 | 亚洲国产精品免费在线观看 | 国产精品一区二区久久不卡 | 精品视频一区二区三三区四区 | 国产精品猎奇系列在线观看 | 日本精品中文字幕在线播放 | 99视频有精品视频免费观看 | 国产一区美女视频 | 亚洲国产成人成上人色 | 图片区小说区欧洲区 | 精品久久久久久乐 | 免费观看国产一区二区三区 | 好操吊| 成年视频xxxxxx在线 | 精新精新国产自在现拍 | 久久久久久岛国免费网站 | 免费a资源 | 中文字幕亚洲一区二区v@在线 | 国产精久久一区二区三区 | 91伊人影院| 色哟哟在线观看视频高清大全 | 国产福利在线视频 | 起碰免费视频97网站 | 国产高清福利91成人 | 狠狠色狠狠色很很综合很久久 | 国产成人久视频免费 | 国产欧美成人 | www.欧美视频 | 日本高清一区二区三区不卡免费 | 国产91在线免费 | 一区二区视频在线 | 91午夜在线 | 久久99精品国产麻豆 | 四虎在线免费观看视频 |