Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
一篇文章講解“模型-內(nèi)置標(biāo)簽之條件標(biāo)簽”,本篇文章講解“模板-內(nèi)置標(biāo)簽之資源文件加載”。
資源文件加載即是在模板中引入CSS、JS等資源文件。
傳統(tǒng)方式的導(dǎo)入外部JS和CSS文件的方法是直接在模板文件使用:
系統(tǒng)提供了專門的標(biāo)簽來簡化上面的導(dǎo)入:
①新建Index控制器,并新建index方法
②新建index.html模板,并引入資源文件
③新建script.js與style.css資源文件
script.js文件:
style.css文件:
注意:
1. ThinkPHP中資源文件的位置為“public/static/”下。
預(yù)覽:
④配合“模板輸出替換”使用
由于文件路徑不對,導(dǎo)致資源文件加載失敗,可以配合模板輸出替換使用。
在config/template.php文件中,定義模板輸出替換:
⑤在index.html模板中使用模板輸出替換
預(yù)覽:
在index.html模板中,使用load標(biāo)簽同時加載多個資源文件。
預(yù)覽:
注意:
1. load標(biāo)簽支持同時加載多個資源文件,文件之間用逗號隔開。
系統(tǒng)還提供了兩個標(biāo)簽別名js和css,用法和load一致。
在index.html模板文件中,使用js與css標(biāo)簽加載資源文件。
預(yù)覽:
關(guān)注卓象程序員,定期發(fā)布技術(shù)文章
下一篇講解“模板-內(nèi)置標(biāo)簽之標(biāo)簽嵌套+原生PHP”
?
加載公共入口文件
項(xiàng)目初始化Init
項(xiàng)目預(yù)編譯
URL分析Dispather
獲取模塊和操作名
項(xiàng)目執(zhí)行exec
執(zhí)行控制器的操作
調(diào)用模塊獲取數(shù)據(jù)
輸出視圖
<?php
define('THINK_PATH', '../ThinkPHP');
//定義項(xiàng)目名稱,如果不定義,默認(rèn)為入口文件名稱
define('APP_NAME', 'web');
define('APP_PATH', './web');
//加載ThinkPHP框架公共入口文件
require(THINK_PATH.'/ThinkPHP.php');
//實(shí)例化一個網(wǎng)站應(yīng)用實(shí)例
$App=new App();
//執(zhí)行應(yīng)用程序
$App->run();
?>
記錄開始執(zhí)行時間 $GLOBALS[‘_beginTime’](19行)
檢測 THINK_PATH、 APP_NAME、 APP_PATH、 RUNTIME_PATH 定義,如果沒有則創(chuàng)建(20-26行)
//不知道你發(fā)現(xiàn)沒有,以index.php這基準(zhǔn),通過APP_PATH,可以組裝出任意路徑
檢查開啟ALLINONE模式 (22行)
把核心編譯緩存和項(xiàng)目編譯緩存合并到一個文件里面去,并且過濾掉一些運(yùn)行模式不需要執(zhí)行的代碼,并且對于用戶的自定義常量全部統(tǒng)一定義,不再進(jìn)行額外的檢測。
檢查是否有核心緩存~runtime.php(33行)
if(file_exists(RUNTIME_PATH.'~runtime.php')) {
// 加載框架核心緩存文件
require RUNTIME_PATH.'~runtime.php';
}else{
//1.加載define.php和functions.php
//2.如果項(xiàng)目編譯緩存目錄不存在,則自動創(chuàng)建項(xiàng)目目錄結(jié)構(gòu)
//3.加載系統(tǒng)核心類庫(包括ThinkPHP\LIB\THINK下級各子目錄下的 Base、App、Action、Model、View、ThinkException、Log)
//4.如果 PHP 版本低于 5.2.0 則加載兼容函數(shù)庫
//生成核心編譯~runtime緩存
}
記錄加載文件時間 $GLOBALS['_loadTime'];
入口文件中調(diào)用的$App->run()
public function run() {
$this->init();
$this->exec();
return ;
}
$App->run()返回的時候,對一個請求的處理就算完成了
1.設(shè)定錯誤和異常處理機(jī)制(39-40行)
(set_error_handler和set_exception_handler)
2.項(xiàng)目預(yù)編譯并載入(44-52行)
// 在部署模式下會自動在第一次執(zhí)行的時候編譯項(xiàng)目
if(defined('RUNTIME_MODEL')){
// 運(yùn)行模式無需載入項(xiàng)目編譯緩存
}elseif(is_file(RUNTIME_PATH.'~app.php') && (!is_file(CONFIG_PATH.'config.php') || filemtime(RUNTIME_PATH.'~app.php')>filemtime(CONFIG_PATH.'config.php'))) {
// 直接讀取編譯后的項(xiàng)目文件
C(include RUNTIME_PATH.'~app.php');
}else{
// 預(yù)編譯項(xiàng)目
App::build();
}
3.設(shè)置時區(qū)支持(59-60行)
4.允許注冊AUTOLOAD方法、 session初始化(62-66行)
5. URL分析和調(diào)度(71行)
執(zhí)行Dispatcher類的靜態(tài)方法 dispatch() 。這段代碼很不錯。
6.加載項(xiàng)目分組公共文件(82-90行)
if(!defined('GROUP_NAME')) define('GROUP_NAME', App::getGroup());
7.取得模塊和操作名稱(92-93行)
if(!defined('MODULE_NAME')) define('MODULE_NAME', App::getModule());
if(!defined('ACTION_NAME')) define('ACTION_NAME', App::getAction());
8.加載模塊配置文件(95-97行)
9.系統(tǒng)檢查(99-104行)
App::checkLanguage(); //語言檢查
App::checkTemplate(); //模板檢查
if(C('HTML_CACHE_ON')) // 開啟靜態(tài)緩存
10.項(xiàng)目初始化標(biāo)簽
初始化完成,init返回
App.class.php 228行
1. 檢查 VAR_MODULE 變量(231行)
(包括 GET 和 POST), 如果未定義,則獲取默認(rèn)分組名
分組名稱解析完畢,也就是http://server/project/index.php/Model/Action/的project部分,回到init
App.class.php 186行
1. 檢查 VAR_MODULE 變量(189行)
(包括 GET 和 POST), 如果未定義,則獲取默認(rèn)模塊名
2. 判斷URL地址是否區(qū)分大小寫
不區(qū)分,小寫模塊名
智能識別方式 index.php/user_type/index/ 識別到 UserTypeAction 模塊
模塊名稱解析完畢,也就是http://server/project/index.php/Model/Action/的Model部分,回到init
App.class.php 209行
1. 檢查 VAR_MODULE 變量(211行)
(包括 GET 和 POST), 如果未定義,則獲取默認(rèn)模塊名
操作名稱解析完畢,也就是http://server/project/index.php/Model/Action/的Action部分,回到init
1.創(chuàng)建Action控制器實(shí)例(379行)
A()函數(shù)
2.獲取當(dāng)前操作名(400行)
$action=ACTION_NAME;
3.執(zhí)行操作(401-418行)
// 執(zhí)行操作鏈 最多只能有一個輸出
1.執(zhí)行前置操作 '_before_'.$action
2.執(zhí)行當(dāng)前操作 $action
3.執(zhí)行后綴操作 '_after_'.$action
exec執(zhí)行完畢,一個請求處理完成了
Thinkphp一次網(wǎng)頁請求,就是實(shí)例化一個網(wǎng)站應(yīng)用實(shí)例 ,并執(zhí)行應(yīng)用程序的過程。執(zhí)行過程$App->run()分為init和exec兩部分。
這中間還省略了一部分分析,比如RBAC,比如Model相關(guān)的代碼,VIEW操作解析等,將在下次分享中討論。
發(fā)一個管理后臺,工作往往是繁瑣而又重復(fù)的:用戶登錄、權(quán)限管理、圖表展示、控制面板、增刪改查等等,同時,需求也是多種多樣的:電商系統(tǒng)、問答社區(qū)、客服系統(tǒng)、倉庫管理等等,五花八門。能不能有一個框架,能直接搭建好項(xiàng)目骨架,讓開發(fā)者專心于業(yè)務(wù)開發(fā)呢?FastAdmin或許是一個不錯的選擇。
FastAdmin,是 karson 在 Gitee 上開源的后臺開發(fā)框架,倉庫位于 https://gitee.com/karson/fastadmin,目前版本為 v1.3.3.20220121。
FastAdmin 基于 ThinkPHP+Bootstrap,能夠快速進(jìn)行管理后臺的開發(fā)。FastAdmin提供了強(qiáng)大的命令行工具,能夠一鍵生成代碼、一鍵管理插件等,提供了豐富的插件選擇,基于MVC設(shè)計(jì)模式,基于模塊化設(shè)計(jì),共分為:前臺、API、后臺和公共等四大部分等。
FastAdmin 的特性包括:
使用FastAdmin,首先進(jìn)行安裝,要求環(huán)境如下:
PHP >=7.1 且 <=7.3 (推薦PHP7.1版本)
Mysql >=5.6 (需支持innodb引擎)
Apache 或 Nginx
PDO PHP Extension
MBstring PHP Extension
CURL PHP Extension
Git (用于源代碼的版本管理)
Node.js (可選,用于安裝Bower和LESS,同時打包壓縮也需要使用到)
Composer (可選,用于管理第三方擴(kuò)展包)
Bower (可選,用于管理前端資源)
Less (可選,用于編輯less文件,如果你需要增改css樣式,建議安裝上)
下載安裝包后,
安裝完成后,就能進(jìn)入后臺了:
FastAdmin基于ThinkPHP5強(qiáng)大的命令行功能擴(kuò)展了一系列命令行功能,可以很方便的一鍵生成CRUD、生成權(quán)限菜單、壓縮打包CSS和JS、啟用禁用插件等功能,如
//生成fa_test表的CRUD
php think crud -t test
//生成fa_test表的CRUD且一鍵生成菜單
php think crud -t test -u 1
//刪除fa_test表生成的CRUD
php think crud -t test -d 1
//生成fa_test表的CRUD且控制器生成在二級目錄下
php think crud -t test -c mydir/test
在FastAdmin中默認(rèn)有四個應(yīng)用模塊:admin、api、common、index,你也可以擴(kuò)展開發(fā)自己的應(yīng)用模塊。
FastAdmin插件豐富,提供了插件市場,能夠隨時獲取各類插件,并直接在后臺進(jìn)行安裝和管理:
FastAdmin 基于 ThinkPHP+Bootstrap,提供了強(qiáng)大的命令行工具,能夠一鍵生成代碼、一鍵管理插件等,提供了豐富的插件選擇,充分利用了ThinkPHP實(shí)現(xiàn)了高效可擴(kuò)展的開發(fā)流程,能夠快速完成管理后臺的開發(fā)。
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。