本文实例讲述了Thinkphp 框架配置操作之配置加载与读取配置。分享给大家供大家参考,具体如下:
在ThinkPHP中,一般来说应用的配置文件是自动加载的,加载的顺序是:
惯例配置->应用配置->模式配置->调试配置->状态配置->模块配置->扩展配置->动态配置
以上是配置文件的加载顺序,因为后面的配置会覆盖之前的同名配置(在没有生效的前提下),所以配置的优先顺序从右到左。
不同的配置文件的区别和位置:
惯例重于配置是系统遵循的一个重要思想,框架内置有一个惯例配置文件(位于ThinkPHP/Conf/convention.php),按照大多数的使用对常用参数进行了默认配置。所以,对于应用的配置文件,往往只需要配置和惯例配置不同的或者新增的配置参数,如果你完全采用默认配置,甚至可以不需要定义任何配置文件
应用配置文件也就是调用所有模块之前都会首先加载的公共配置文件(默认位于Application/Common/Conf/config.php)。
如果更改了公共模块的名称的话,公共配置文件的位置也相应改变
如果使用了普通应用模式之外的应用模式的话,还可以为应用模式(后面会有描述)单独定义配置文件,文件命名规范是: Application/Common/Conf/config_应用模式名称.php(仅在运行该模式下面才会加载)。
模式配置文件是可选的
如果开启调试模式的话,则会自动加载框架的调试配置文件(位于ThinkPHP/Conf/debug.php)和应用调试配置文件(位于Application/Common/Conf/debug.php)
每个应用都可以在不同的情况下设置自己的状态(或者称之为应用场景),并且加载不同的配置文件。
举个例子,你需要在公司和家里分别设置不同的数据库测试环境。那么可以这样处理,在公司环境中,我们在入口文件中定义:
define('APP_STATUS','office');
那么就会自动加载该状态对应的配置文件(位于Application/Common/Conf/office.php)。
如果我们回家后,我们修改定义为:
define('APP_STATUS','home');
那么就会自动加载该状态对应的配置文件(位于Application/Common/Conf/home.php)。
状态配置文件是可选的
每个模块会自动加载自己的配置文件(位于Application/当前模块名/Conf/config.php)。
如果使用了普通模式之外的其他应用模式,你还可以为应用模式单独定义配置文件,命名规范为: Application/当前模块名/Conf/config_应用模式名称.php(仅在运行该模式下面才会加载)。
模块还可以支持独立的状态配置文件,命名规范为: Application/当前模块名/Conf/应用状态.php。
无论何种配置文件,定义了配置文件之后,都统一使用系统提供的C方法(可以借助Config单词来帮助记忆)来读取已有的配置。
用法:
C('参数名称')
例如,读取当前的URL模式配置参数:
$model = C('URL_MODEL'); // 由于配置参数不区分大小写,因此下面的写法是等效的 // $model = C('url_model');
但是建议使用大写方式的规范。
注意:配置参数名称中不能含有 “.” 和特殊字符,允许字母、数字和下划线。
如果url_model尚未存在设置,则返回NULL。
支持在读取的时候设置默认值,例如:
// 如果my_config尚未设置的话,则返回default_config字符串 C('my_config',null,'default_config');
C方法也可以用于读取二维配置:
//获取用户配置中的用户类型设置 C('USER_CONFIG.USER_TYPE');
因为配置参数是全局有效的,因此C方法可以在任何地方读取任何配置,即使某个设置参数已经生效过期了。
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
网上解决办法均是 在发起请求之前添加 jQuery.support.cors=true;但是,线下测试...
template、tags、roles 一、Templates模块 二、tags模块 三、roles 实验ansible...
1. 大家听过 MySQL MGR 技术吗? MySQL 是目前最流行的开源关系型数据库,国内金...
在介绍之前,首先一个概念明确一个共识:没有攻不破的网站,只有值不值得。 这意...
前言 在java的spring中有自动注入功能,使得代码变得更加简洁灵活,所以想把这个...
前言 Microsoft.AspNetCore.ConcurrencyLimiter AspNetCore3.0后增加的,用于传入...
云上运维,那就是和云上资源和产品打交道,无疑会涉及到一系列的资源部署。比如...
博客园的用户体验已经到了无可挽救的地步了! hook源码其实不多,但是实现的比较...
本人负责的项目主要采用阿里云数据库 MySQL,最近频繁出现慢 SQL 告警,执行时间...
自定义PMD检测的类型集合 PMD所能检测的类型八大种 使用方法 使用xml配置文件配...