配置文件Config
Config文件包含:2个属性,7个方法。其中2个属性为私有静态属性,外部不可访问。7个方法为公有静态方法,外部可以直接用类名访问,不需要实例化。
配置文件Config目录
三类配置目录:默认配置目录,自定义配置目录,扩展配置目录。无论采用哪一种配置目录,最终都会于应用配置文件合并输出。系统application下的config.php与框架thinkphp下的convention.php这两个文件为默认文件,通常建议不要修改。1.默认配置目录
应用配置:application目录
模块配置:application/模块目录2.自定义配置目录
入口文件中添加:CONF_PATH常量
按常量约定创建对应配置目录3.扩展配置目录
在application/模块目录中创建extra目录
文件名->配置名,内容->配置名
配置文件Config格式
四种配置文件格式:数组,ini,xml,json。其中数组较为常用,无论哪一种格式配置文件,最终都是以Array数组键值对的方式返回。
场景配置
场景配置,可以看到文件级的动态配置,它为框架的使用者,提供了一种在特殊的环境下,简便的解决方案。1.修改应用或模块配置文件中的:‘app_status’,将值设置为,如:home;2.在与该配置文件同级的目录下,创建与场景名称同名的配置文件,如home.php;3.再次执行,将会自动根据场景配置文件(home.php),更新当前应用的配置文件。
模块配置
为降低应用的复杂度,提供安全性,绝大多数情况下,模块配置用得并不多,但如果你有个性化需求时,使用模块设置会方便很多。1.模块可以有自己的配置文件,独立配置文件和场景配置文件;2.模块配置的优先级高于应用配置,相同配置项会覆盖掉应用汇总的配置项;3.模块默认配置文件名是:config.php;4.模块默认独立配置文件有二个:database.php,validate.php;5.模块场景配置文件名,根据‘app_status’参数值确定。
其它位置的配置文件
加载任意位置,非php格式的配置文件,不仅提高了灵活性,还为其它应用提供了一个配置接口。
1.如果配置文件是php文件
\think\Config::load(APP_PATH.'完整文件名'); //使用绝对路径加载,默认返回数组
2.如果配置文件是其它格式:ini,xml,json等
\think\Config::parre(APP_PATH.'完整文件名'.'ini'); //使用绝对路径加载,默认返回数组
注意:读取其它位置的配置文件,都是动态加载,需要在控制器中的方法中执行加载。
读取配置项
一.读取配置项1.类方法:Config::get('配置参数'),参数为空则是获取全部配置项;2.使用助手函数:config('配置参数'),参数说明与Config::get()玩完一样;3.读取二级配置项,参数与值之间用.(点)进行连接。
二.判断某配置项是否存在1.类方法:Config::has('配置参数'); //返回布尔值;2.助手函数:config('?配置参数');//返回布尔值。
设置配置项
在控制器的方法中,动态设置配置项,可以临时改变某个配置项,优先级也是最高
一.类方法:\think\Config.php1.逐个配置:Config::set('配置参数',参数值);2.批量配置:Config::set('数组');3.二级配置:Config::set('配置参数','数组')。
二.助手函数:config()1.逐个配置:config('配置参数','参数值');2.批量配置:config('数组');3.二级配置:config('配置参数','数组')。
创建独立配置文件
将应用模块中的部分可归类的配置独立出来,单独创建配置文件来加载,可以使我们的祝配置文件加载更快,执行效率更高。1.用户自定义的独立配置文件必须放在应用或模块下面的extra目录下面;2.默认独立配置文件dtabase.php[数据库],validate.php[验证规则]既可以放在extra下面,也可以放在与应用或模块同级的目录下面。如果放在extra目录下面,优先级大于放在应用或模块的同级目录下面;3.文件名就是配置项名称,文件返回一个数组。
模块配置优先级
框架配置分级管理,可以最大限度的满足用户对应用运行环境的个性化需求,配置优先级的概念非常重要。
惯例配置(convention.php,config.php) < 应用配置(应用配置 < 独立配置 < 场景配置) < 模块配置(应用配置 < 独立配置 < 场景配置) < 动态配置(set)
配置项的作用域
配置项的作用域,类似于类或函数的命名空间,就是配置项对用户的可见性,随着应用规模的扩大,配置作用域的效果就越明显。1.作用域与命名空间的概念类似,就是配置项的可见范围;2.作用域的在表现形式上与二维数组是一样的;3.切换作用域使用:Config::range('作用域');4.可以将独立配置项归纳到作用域进行管理,也可以动态设置。