圖解ThinkPHP5框架(四):一張圖徹底吃透框架配置(終結版)
本課程共分10個模組,從設定檔格式(php/ini/json/xml)到場景配置,模組配置,擴展配置,獨立配置,動態配置,自訂配置載入,環境變數變數,全景展現一個多彩的ThinkPHP5配置世界~~。
請將圖片開啟到新網頁查看,效果更好。或下載到本地檢視。本圖由xmind心智圖製作,底部有xmind原始檔下載,用xmind軟體開啟效果更棒。
一、心智圖:
二、檔案描述:
ThinkPHP5框架配置
1 設定目錄
1.1 預設設定目錄
1.1.1 應用程式設定:application目錄
1.1.2 模組設定: application/模組目錄
1.2 自訂設定目錄
1.2.1 入口檔案中:define('CONF_PATH', __DIR__.'/../config/');
1.2.2定義使用者自訂設定檔目錄和應用程式目錄同級
1.2.3 應用程式設定檔包含三個:config.php/database.php/route.php
1.2.4 模組配置檔案包括三個:config.php/database.php
1.2.5 路由在應用程式初始化時已產生,所以不要在模組中設定route.php
1.3 擴充配置目錄
1.3.1 在應用程式或模組設定目錄下建立extra目錄
1.3.2 在extra目錄下建立的設定檔名稱,就是擴充組態名稱,所以擴充配置都是二維陣列
1.在extra目錄建立:myconf.php
2.在myconf.php檔案中:
<?php return [ 'site_name'=>'www.php.cn', ];
3. 在控制器中存取:
dump(\think\Config::get());
可以在最後面看到:
["myconf"] => array(1) { ["site_name"] => string(10) "www.php.cn" }
1.3.3 最終建立的擴充配置項,都會與應用程式配置項合併(dump(\think\Config::get());/ /檢視)
2 組態格式
#2.1 Array格式
2.1 Array格式
2.1.1 這是預設格式,不用在入口檔案中設定CONF_EXT常
2.1.2 設定檔:config.php,內容是用return 傳回的陣列
<?php return [ 'my_name' => '朱老师', ];
<?php return [ 'my_info' => [ 'my_name' => '朱老师', 'my_age' => 28, 'my_sex' => '男', ], ];
2.1.4 返回內容自動與應用程式配置合併,以數組方式返回
["my_info"] => array(3) { ["my_name"] => string(9) "朱老师" ["my_age"] => int(28) ["my_sex"] => string(3) "男" }
2.2 ini格式
2.2.1 在入口檔案中變更設定格式: define('CONF_EXT', '.ini');
<?php // 定义应用目录 define('APP_PATH', __DIR__ . '/../application/'); //定义配置目录 define('CONF_PATH', __DIR__ . '/../config/'); // 更改配置格式为ini格式 define('CONF_EXT', '.ini'); // 加载框架引导文件 require __DIR__ . '/../thinkphp/start.php';
2.2.2 設定檔:config.ini,內容是由等號連接的名值對組成, 註解寫在分號;後面
#
config.ini 内容: my_name=朱老师 ;我的姓名 ;my_name是配置名称,朱老师是值,分号后面是该配置项的注释部分,可以省略
2.2.3 支援二級配置,配置項目放在一對方括號中
config.ini中的二級配置內容
[base_info] my_name=朱老师;我的姓名 my_age=28 ;我的年龄 my_sex=男 ;我的性别
應用程式配置中返回結果是二維數組:
["base_info"] => array(3) {
["my_name"] => string(9) "朱老师"
["my_age"] => string(2) "28"
["my_sex"] => string(3) "男"
}
<?php // 定义应用目录 define('APP_PATH', __DIR__ . '/../application/'); //定义配置目录 define('CONF_PATH', __DIR__ . '/../config/'); // 更改配置格式为ini格式 define('CONF_EXT', '.xml'); // 加载框架引导文件 require __DIR__ . '/../thinkphp/start.php';
<config> <my_home>安徽省合肥市</my_home> </config> <!--标签名就是配置项,可以自定义,根标签一定是config,其它字符串也行,内容在标签对中,--> <abc> <my_home>安徽省合肥市</my_home> </abc> <!--标签只要成对出现就行-->
<abc> <info> <my_home>安徽省合肥市</my_home> <my_work>中文网</my_work> </info> </abc>
["info"] => array(2) { ["my_home"] => string(18) "安徽省合肥市" ["my_work"] => string(9) "中文网" }
<?php // 定义应用目录 define('APP_PATH', __DIR__ . '/../application/'); //定义配置目录 define('CONF_PATH', __DIR__ . '/../config/'); // 更改配置格式为ini格式 define('CONF_EXT', '.xml'); // 加载框架引导文件 require __DIR__ . '/../thinkphp/start.php';
{ "my_name":"朱老师", "my_age":28, "my_sex":"男" }
{ "base_info":{ "my_name":"朱老师", "my_age":28, "my_sex":"男" } }
["base_info"] => array(3) { ["my_name"] => string(9) "朱老师" ["my_age"] => int(28) ["my_sex"] => string(3) "男" }
同样,如果你到了公司,要换成公司的数据库,可以在应用配置文件中:
<?php return [ // 应用模式状态,将home改成office 'app_status' => 'office', ];
3.3 在应用配置目录下创建与场景名称同名的php文件做为配置文件,以数组方式返回配置项
然后在当前应用配置目录下面创建一个:home.php文件
里面写上如下内容:
实际上就是database.php中的内容复制一份就行。
<?php return [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => 'localhost', // 数据库名 'database' => 'home', // 用户名 'username' => 'root_home', // 密码 'password' => 'root_home', // 端口 'hostport' => '', // 连接dsn 'dsn' => '', // 数据库连接参数 'params' => [], // 数据库编码默认采用utf8 'charset' => 'utf8', // 数据库表前缀 'prefix' => '', // 数据库调试模式 'debug' => true, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) 'deploy' => 0, // 数据库读写是否分离 主从式有效 'rw_separate' => false, // 读写分离后 主服务器数量 'master_num' => 1, // 指定从服务器序号 'slave_no' => '', // 是否严格检查字段是否存在 'fields_strict' => true, // 数据集返回类型 'resultset_type' => 'array', // 自动写入时间戳字段 'auto_timestamp' => false, // 时间字段取出后的默认时间格式 'datetime_format' => 'Y-m-d H:i:s', // 是否需要进行SQL性能分析 'sql_explain' => false, // Builder类 'builder' => '', // Query类 'query' => '\\think\\db\\Query', ];
同样,如果你到了公司,要换成公司的数据库,
然后在应用配置目录下创建office.php文件,将数据库配置信息写入,以数据形式返回,就可以了。
4 模块配置
4.1 模块也可以有自己的独立配置:模块名/config.php
4.2 模块配置优先于应用配置,相同配置会覆盖应用配置
4.3 模块也支持场景状态配置,原理与步骤与应用一致
1.创建模块配置文件: application/index/config.php
2. 添加配置项,修改应用状态
<?php return [ // 模块模式状态 'app_status' => 'module_office', ];
3.在index模块目录下创建: modult_office.php,做为模块的场景状态配置文件
文件内容也以数据库连接为例:
<?php return [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => 'localhost', // 数据库名 'database' => 'modult_office', // 用户名 'username' => 'modult_office', // 密码 'password' => 'modult_office', // 端口 'hostport' => '', // 连接dsn 'dsn' => '', // 数据库连接参数 'params' => [], // 数据库编码默认采用utf8 'charset' => 'utf8', // 数据库表前缀 'prefix' => '', // 数据库调试模式 'debug' => true, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) 'deploy' => 0, // 数据库读写是否分离 主从式有效 'rw_separate' => false, // 读写分离后 主服务器数量 'master_num' => 1, // 指定从服务器序号 'slave_no' => '', // 是否严格检查字段是否存在 'fields_strict' => true, // 数据集返回类型 'resultset_type' => 'array', // 自动写入时间戳字段 'auto_timestamp' => false, // 时间字段取出后的默认时间格式 'datetime_format' => 'Y-m-d H:i:s', // 是否需要进行SQL性能分析 'sql_explain' => false, // Builder类 'builder' => '', // Query类 'query' => '\\think\\db\\Query', ];
4. 保存后,打开浏览器查看,可以看到配置更新结果
5 其它位置的配置文件
5.1 全部在控制器的方法中动态调用Config类中的方法完成手工加载
5.2 用Config::load(配置文件):可以加载任何位置的配置文件,默认Array格式
先在与config目录中创建同级的newconf目录,在该目录下创建conf.php,如果是.php文件,就默认是以数组方式返回配置项,采用Config::load()方法手工动态加载
config/newconf/conf.php文件内容
<?php return [ 'user_define' =>'www.php.cn' ];
控制器中的:index/index/中的index方法
<?php namespace app\index\controller; class Index { public function index() { //手工加载指定目录下的配置文件,注意Config类的命名空间 \think\Config::load(APP_PATH.'../config/newconf/conf.php'); dump(\think\Config::get()); } }
5.3 如果是其它格式(ini/xml/json)用Config::parse(文件,'类型')来加载
先在与config目录中创建同级的newconf目录,在该目录下创建conf.ini,按框架的约定,不论是什么格式的配置文件,最终必须是以数组方式返回配置项,所以第一步就是要将其它格式的数组,解析成数组,所以就不能再用Config::load()方法了,Config类提供了一个Config::parse()方法来加载其它格式的配置文件,这个方法有二个参数,第一个是要加载的配置文件,第二个就是当前配置文件的格式,如ini,xml或json等
我们以ini格式为例
config/newconf/conf.ini文件内容
my_system = mac_os my_phone = huawei
控制器中的:index/index/中的index方法
<?php namespace app\index\controller; class Index { public function index() { //手工加载指定目录下的配置文件,注意Config类的命名空间 \think\Config::parse(APP_PATH.'../config/newconf/conf.ini','ini'); dump(\think\Config::get()); } }
5.4 最终与前面一样,都是与应用配置合并后以数组方式返回全部配置项
["my_system"] => string(6) "mac_os" ["my_phone"] => string(6) "huawei"
6 读取配置项
6.1 方法1:Config::get('参数'),不传入参数则是读取应用的全部配置项
6.2 方法二:作用助手函数config(),不需要导入命名空间直接使用,效率低不推荐
6.3 Config::get('my_info.my_system')方法可以读取二级配置,配置项之间用.点连接
6.4 Config::has(''app_status''):has方法检测某个配置项是否存在,返回布尔值
在控制器中检测:某个配置项是否存在
<?php namespace app\index\controller; class Index { public function index() { dump(\think\Config::has('app_status')); } }
6.5 如何用助手函数:config('?配置参数');也返回布尔值
<?php namespace app\index\controller; class Index { public function index() { dump(config('?app_status')); } }
7 动态设置参数
7.1 配置项可以写在配置文件,也可以用Config::set()方法动态设置
7.2 Config::set(名称,值),可以逐个设置,也可用数组批量设置:Config::set(数组)
一、名值对方式,逐个设置
<?php namespace app\index\controller; class Index { public function index() { \think\Config::set('site_domain','www.php.cn'); dump(\think\Config::get()); } }
二、数组方式,批量设置
<?php namespace app\index\controller; use think\Config; class Index { public function index() { $config = [ 'site_domain' => 'www.php.cn', 'site_name' => 'PHP中文网', 'php_tools' => 'PHP程序员工具箱', ]; Config::set($config); dump(Config::get()); } }
7.3 助手函数config(名值对/数组),也可以进行动态设置
将上面的用Config类的代码微微改一下就行,
去掉上面的空间导入
将Config::set()和Config::get()全部换成config()就可了。
<?php namespace app\index\controller; class Index { public function index() { $config = [ 'site_domain' => 'www.php.cn', 'site_name' => 'PHP中文网', 'php_tools' => 'PHP程序员工具箱', ]; config($config); dump(config()); } }
8 独立配置文件
8.1 5.0.1以上版本,直接将独立配置文件放在应用或模块的extra目录下即可
自动读取的独配置文件都是二级配置参数,一级配置名称就是扩展配置的文件名。
8.2 默认设置了2个独立配置文件,database.php(数据库配置) 和 validate.php(验证规 则)
8.3 四类默认加载的独立配置文件不用放在extra目录下
8.3.1 应用或者模块配置文件:config.php
8.3.2 数据库配置文件:database.php
8.3.3 行为定义文件:tags.php
8.3.4 场景配置文件:例如home.php,office.php
9 配置参数的作用域
9.1 类似于命名空间,以二维数组方式来收纳参数
9.2 切换作用域: Config::range(),默认值为:_sys_
9.3 可以将扩展配置或独立配置归纳到作用域,或动态设置Config::set()
<?php namespace app\index\controller; use think\Config; class Index { public function index() { //设置一组配置项 $config = [ 'user_name'=>'peter', 'user_age'=>28, ]; //批量设置,写入user作用域 Config::set($config,'user'); //输出全部配置项,发现作用域相当于二维数组名称 dump(Config::get()); //用二维数组方式获取user作用域中的user_name值 dump(Config::get('user.user_name')); //同样用数组的方式来设置配置项的值 Config::set('user.user_name','php.cn'); echo '<hr>'; //查看设置好的新值 dump(Config::get('user.user_name')); //切换作用域到系统全局_sys_(默认):用 Config::range()方法 Config::range('_sys_'); //查看全部配置项 dump(Config::get()); } }
10 系统环境变量配置
10.1 在应用同级目录创建.env文件来模拟系统变量,内容格式为:ini
app_status = office ;配置场景为office
10.2 原生方法:获取系统环境变量:$_ENV,getenv(变量名),
10.3 TP提供Env.php类,该类只有一个方法:Env::get(变量名)来获取环境变量
10.4 .env文件不支持非标量,如需使用数组,要用_下划线连接方式进行参数分级设置
注意,环境变量不支持数组参数,如果需要使用数组参数可以,使用下划线分割定义配置参数名:
database_username = database_password = root 123456 //或者使用 [database] username = password = root 123456
10.5 对于数组参数,访问时可以用下划线或者.点语法都可以
获取环境变量的值可以使用下面的两种方式获取:
Env::get('database.username'); Env::get('database.password'); // 同时下面的方式也可以获取 Env::get('database_username'); Env::get('database_password');
可以支持默认值,例如:
// 获取环境变量 如果不存在则使用默认值root Env::get('database.username','root');
10.6 环境变量读取优先于应用配置参数,所以可以配置参数中引用环境变量
可以直接在应用配置中使用环境变量,例如:
return [ 'hostname' => Env::get('hostname','127.0.0.1'), ];
三、思维导图下载:
以上是圖解ThinkPHP5框架(四):一張圖徹底吃透框架配置(終結版)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。
