网站建设哪家服务好莫停之科技windows优化大师

遵循惯例重于配置的原则,系统会按照下面的顺序来加载配置文件(配置的优先顺序从右到左),所以优先级的顺序为动态配置 > 模块配置 > 应用配置 > 惯例配置
惯例配置->应用配置->模块配置->动态配置
- 惯例配置:核心框架内置的配置文件,无需更改。
- 应用配置:每个应用的全局配置文件(框架安装后会生成初始的应用配置文件),有部分配置参数仅能在应用配置文件中设置。
- 模块配置:每个模块的配置文件(相同的配置参数会覆盖应用配置),有部分配置参数模块配置是无效的,因为已经使用过。
- 动态配置:主要是指在控制器或者行为中进行(动态)更改配置,该配置方式只在当次请求有效,因为不会保存到配置文件中
官方使用文档:https://www.kancloud.cn/manual/thinkphp5_1/353951
先介绍,Yaconf文档地址:http://www.laruence.com/2015/06/12/3051.html
yaml文档地址:https://www.runoob.com/w3cnote/yaml-intro.html
yaconf和yaml的源码安装,github克隆源代码即可
$ cd yaconf-master
$ phpize
$ ./configure --with-config=/usr/local/bin/php-config
$ make && make install# 生成yaconf.so文件,修改php.ini文件,指定yaconf存放配置文件目录,重启php-fpm
# 这里就不赘述yaml扩展的安装
extension=yaconf.so
extension=yaml.so
yaconf.directory=/Users/liujingxiong/web/easySwooleApi/ini
使用Yaconf的好处:
1. 它使用单独的一个配置目录(在yaconf.directory指定), 不和代码在一起.
2. 它在PHP启动的时候, 处理所有的要处理的配置, 然后这些配置就会常驻内存, 随着PHP的生命周期存亡. 避免了每次请求的时候解析配置文件.
3. 所有的配置内容都是immutable的, 这就可以借助于Fork的COW, 降低内存占用, 并且在访问配置的时候, 几乎不需要任何的内存Copy, 也不会有无谓的引用计数增减
4. 最重要的, 配置目录和代码分离以后, 可以借助一个配置管理后台, 来实现配置的统一化管理.
5. 它支持(对于非ZTS)配置变更重新加载, 也就是说配置如果有变化(建议更改配置一定使用mv, 不要使用cp), 它会reload, 不需要重启(检测的频率由yaconf.check_delay控制).
6. 它支持丰富的配置类型, 包括字符串, 数组, 分节, 分节继承, 并且还可以在配置中直接写PHP的常量和环境变量等.
7. 最重要的是, 它很简单.
从原理开始:
<?
在框架初始化时会调用到App.php类中的init方法(后面讲解框架执行流程的时候还会详细降到,这里先提一下)会调用到$this->config->load()方法即走到Config.php类中的加载配置文件方法。
<?
走到LoadFile()方法,这里使用的是工厂模式,不同后缀的配置文件的加载,但是这里的if判断写的没有必要,不够统一,直接将php,yaml后缀的的配置文件也走工厂模式。这里用到工厂模式所有的类都去实现parse方法,调用Loader::factory()方法进行类的实例化,结合容器和反射思想,这些后面都会介绍。最终通过Config类的set方法将所有的配置存到Config类的config属性中。
<?
补充上.php和.yaml后缀的配置文件
// thinkconfigdrivenPhp.php
// thinkconfigdrivenYaml.php
测试用例:
// applicationindexcontrollerTestConfig.php
// tp51.ini
name='allen'
age=23
结果:

如何使用.yaml结尾的配置文件,需要在.env文件中定义CONFIG_EXT=".yaml", 如果想所有的配置文件都生效,那么需要将config/下的配置文件都改为.yaml结尾,这里我猜到一个坑,就是.env中定义的是.yaml,但是其他的配置文件没有修改,导致如何修改config/下的配置文件都不生效,这里需要注意一下。
// configallen.yaml
结果:
