亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

ThinkPHP應用模式擴展之謎

2020-03-22 19:26:37
字體:
來源:轉載
供稿:網友
  • ThinkPHP應用模式提供了對核心框架進行改造的機會,可以讓你的應用適應更多的環境和不同的需求。每個應用模式都有自己的模式定義文件,相對與ThinkPHP3.1版本,ThinkPHP3.2版本對應用模式的擴展更加明確和清晰,在ThinkPHP3.1版本中定義了Cli、Lite、Thin、AMF、PHPRPC、REST模式,其定義方式和ThinkPHP3.2版本的方式大同小異,如有需要可以參考修改,其中Cli模式被Thinkhtml' target='_blank'>PHP框架內置,不用單獨定義Cli模式即可正常使用,如需要更細化調整可以參考3.1版編寫的Cli運行模式擴展。ThinkPHP同樣提供了便捷的開發環境和正式環境的模式切換方式。讓我們隨著ThinkPHP的運行流程解析其應用模式擴展之謎。

    一、應用模式的使用

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

    if(function_exists('saeAutoLoader')){// 自動識別SAE環境    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'); // 應用模式 默認為普通模式       defined('STORAGE_TYPE') or define('STORAGE_TYPE',   'File'); // 存儲類型 默認為File   }


    二、應用模式定義

    在ThinkPHP框架當中除了ThinkPHP框架入口和框架引導類以外,基本所有其他功能都可以通過應用模式進行更改和擴展,如果我們要增加一個應用模式,只需要在ThinkPHP/Mode目錄下面定義一個模式定義文件即可,我們可以通過分析common模式進行學習。

    //文件路徑:ThinkPHP/Mode/common.php/** * ThinkPHP 普通模式定義 * 定義一個模式文件,只需要返回一個模式包含文件的數組即可 * 在數組中主要包含4種擴展文件列表: *     config 為默認加載配置文件列表 *     alias  為核心類庫別名配置列表 *     core 需要加載的核心函數和類文件列表 *     tags 行為配置列表 * * 如果在應用模式定義中加載一個自定類,那個自定義類的命名空間必須是Think */return array(    // 配置文件    'config'    =>  array(        THINK_PATH.'Conf/convention.php',   // 系統慣例配置        CONF_PATH.'config.php',      // 應用公共配置    ),     // 別名定義    '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,    ),     // 函數和類文件    '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', // 讀取靜態緩存        ),        'app_end'       =>  array(            'Behavior/ShowPageTraceBehavior', // 頁面Trace顯示        ),        'view_parse'    =>  array(            'Behavior/ParseTemplateBehavior', // 模板解析 支持PHP、內置模板引擎和第三方模板引擎        ),        'template_filter'=> array(            'Behavior/ContentReplaceBehavior', // 模板輸出替換        ),        'view_filter'   =>  array(            'Behavior/WriteHtmlCacheBehavior', // 寫入靜態緩存        ),    ),);


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

    //判斷是否存在core.php配置文件(這是開發環境臨時定義的運行模式,我是這么理解的)          //否者加載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);          }           // 讀取當前應用模式對應的配置文件          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']);          }           // 加載應用別名定義文件          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']);          }           // 加載應用行為定義          if(is_file(CONF_PATH.'tags.php'))              // 允許應用增加開發模式配置定義              Hook::import(include CONF_PATH.'tags.php');             // 加載框架底層語言包          L(include THINK_PATH.'Lang/'.strtolower(C('DEFAULT_LANG')).'.php');


    通過ThinkPHP::start()中的這段代碼,完美無縫關聯的模式定義文件的意義與實現方法。

    三、定義簡單的運行模式

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

    return array(   // 配置文件  'config'    =>  array(               THINK_PATH.'Conf/convention.php',     // 系統慣例配置               CONF_PATH.'config.php',      // 應用公共配置   ),  // 別名定義    '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, ),  // 函數和類文件    '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、內置模板引擎和第三方模板引擎               ),               'template_filter'=> array(                     'Behavior/ContentReplace', // 模板輸出替換               ), ),);


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

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

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

    當文件所有擴展文件的實現后,可以在框架入口文件定義APP_MODE常量為lite。

    在這里吐槽以下官方:本節手冊當中居然要定義MODE_NAME常量來改變運行模式,為了準確性無奈在ThinkPHP框架全部文件中搜索MODE_NAME,結果都沒有才放下一個懸著的心。這是之前3.1版本中定義運行模式的方法,手冊更新細節問題(聲明一下我現在用的手冊是3.2.12014年2月14日的版本)。


    PHP編程

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

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    精品国产依人香蕉在线精品| 欧美老女人性视频| 国产精品福利久久久| 精品国产乱码久久久久久虫虫漫画| 日韩国产激情在线| 国产精品日日摸夜夜添夜夜av| 欧美中在线观看| 国产精品视频播放| 日韩在线欧美在线国产在线| 欧美精品在线视频观看| 日韩av网站大全| 92看片淫黄大片看国产片| 日韩动漫免费观看电视剧高清| 国产香蕉精品视频一区二区三区| 久久精品99久久香蕉国产色戒| 91天堂在线视频| 精品国内亚洲在观看18黄| 高清欧美性猛交xxxx黑人猛交| 欧美性开放视频| 国产在线日韩在线| 久久黄色av网站| 国产亚洲免费的视频看| 亚洲人成毛片在线播放| 国产免费一区二区三区在线能观看| 国产精品入口免费视频一| 欧美大片免费观看| 亚洲成人黄色网| 在线观看精品自拍私拍| 热久久99这里有精品| 国产精品一区二区av影院萌芽| 久久99精品视频一区97| 亚洲天堂免费在线| 色视频www在线播放国产成人| 亚洲丝袜在线视频| 亚洲国产成人精品电影| 18久久久久久| 国产亚洲在线播放| 亚洲精品按摩视频| 亚洲视频欧洲视频| 国产在线视频2019最新视频| 国产亚洲a∨片在线观看| 午夜精品一区二区三区视频免费看| 亚洲人成网在线播放| 精品国内产的精品视频在线观看| 欧美日韩国产专区| 91精品国产沙发| 日韩高清中文字幕| 中文字幕在线观看亚洲| 欧美性极品xxxx娇小| 亚洲国产高清自拍| 欧美性猛交99久久久久99按摩| 久久久人成影片一区二区三区观看| 亚洲福利视频久久| 亚洲激情国产精品| 日本亚洲欧美成人| 欧美精品手机在线| 日韩电影免费观看在线| 国产美女久久久| 国产日韩欧美在线播放| 色综合老司机第九色激情| 国产精品私拍pans大尺度在线| 亚洲国产精品专区久久| 成人久久一区二区| 麻豆乱码国产一区二区三区| 久久久久久久影院| 欧美国产一区二区三区| 国产91对白在线播放| 亚洲黄一区二区| 亚洲欧美在线第一页| 亚洲美女av在线| www.欧美三级电影.com| 欧美一级视频免费在线观看| 国产网站欧美日韩免费精品在线观看| 中文字幕亚洲二区| 亚洲四色影视在线观看| 日韩美女在线播放| 国产色婷婷国产综合在线理论片a| 日韩成人在线播放| 国产精品日韩av| 欧美日韩国产色| 曰本色欧美视频在线| 国产精品视频久久久久| 懂色aⅴ精品一区二区三区蜜月| 欧美野外wwwxxx| 久久久伊人日本| 亚洲精品成a人在线观看| 欧美午夜久久久| 久久精品视频99| 91sao在线观看国产| 欧洲美女7788成人免费视频| 国产精品视频播放| 国产精品自产拍在线观看中文| 亚洲va久久久噜噜噜| 亚洲精品久久久久久久久| 欧美高清videos高潮hd| 日韩在线视频免费观看| 日韩专区中文字幕| 成人性教育视频在线观看| 久久久999精品| 久久99精品国产99久久6尤物| 国产精品狼人色视频一区| 欧美国产极速在线| 91久久在线观看| 欧美大尺度激情区在线播放| 日本不卡高字幕在线2019| 欧美国产一区二区三区| 欧美理论电影网| 亚洲欧美日韩精品久久奇米色影视| 欧美体内谢she精2性欧美| 精品高清一区二区三区| 91精品在线看| 日韩中文字幕网| 国产热re99久久6国产精品| 欧美最猛性xxxxx亚洲精品| 久久的精品视频| 在线国产精品播放| 日韩有码在线观看| 日本久久久久久久| 国产精品视频免费观看www| 久久久综合免费视频| 亚洲一区二区久久久久久久| 久久精品成人一区二区三区| 久久精品久久久久久| 亚洲国产精品电影在线观看| 日韩激情视频在线| 黑人欧美xxxx| 国产精自产拍久久久久久| zzjj国产精品一区二区| 美女av一区二区| 免费91麻豆精品国产自产在线观看| 欧洲亚洲免费在线| 成年人精品视频| 国产精品91视频| 日本国产欧美一区二区三区| 国产亚洲精品久久久久久牛牛| 国产人妖伪娘一区91| 日韩成人在线播放| 日韩网站在线观看| 亚洲成人a级网| 久久91超碰青草是什么| 久久综合免费视频| 欧美午夜丰满在线18影院| 日韩高清电影好看的电视剧电影| 欧美日韩在线第一页| 中文字幕亚洲一区| 亚洲韩国日本中文字幕| 中国china体内裑精亚洲片| 久久精品国产91精品亚洲| 91精品91久久久久久| 日韩激情在线视频| 国产高清在线不卡| 清纯唯美日韩制服另类| 国产精品自拍小视频| 欧美日韩精品二区| 久热精品视频在线免费观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产亚洲欧美日韩精品| 91欧美精品午夜性色福利在线| 亚洲全黄一级网站| 精品一区二区亚洲| 日本精品性网站在线观看| 亚洲精品理论电影| 91美女片黄在线观| 欧美激情一区二区久久久|