ThinkPHP学习之配置和环境

TP5框架的有六大配置: 惯例配置, 应用配置, 扩展配置, 场景配置, 模块配置, 动态配置。v5.0.9默认在application/目录下新建了应用配置文件config.php。我不推荐把所有配置项填写在这个文件中, 我们的项目中有数据库配置, Session配置, 缓存配置, Cookie配置, 邮件配置等等, 全部放在一个文件中会显得冗长不便于扩展。

一般PHP框架的学习流程是先路由然后MVC到模板, TP框架学习的第一步却是配置。

  • cofig()助手函数是对think/Config类的封装,Config有range(), parse(), load(), has(), get(), set(), reset()等静态方法。

  • thinkphp/convention.php就是惯例配置的内容, 考虑扩展和迭代开发的话这个文件不应该被修改。删除config.php, 在不同模块中使用助手函数config()输出默认惯例配置的内容。

  • 在项目根目录新建conf/config.php, 这里填写的就是应用配置。你可以添加惯例配置中没有的键值对,也可以填写同名配置项, TP5底层使用了array_merge()更新配置项。

  • 扩展配置如email, 必须新建conf/extra/目录并新建扩展配置文件email.php, 返回一个email的相关信息。查看config()可以看到多出一个email数组配置项, 这个配置项的key就是刚才新建的文件名email.php。数据库的配置文件名必须为database.php, 所在路径是conf/或者conf/extra/。当然你也可以以数组形式写在conf/config.php中。扩展配置会merge替换应用配置。

  • 场景配置能让你在公司和家里使用不同的配置项。比如你公司家里各有台式机, 这时候你应该在conf/中新建office.php和home.php并分别在里面配置相关环境项, 然后在config/中填写app_status项的value为对应的环境如home。

  • 模块配置顾名思义就是让不同的模块有不同的配置项, 如果你要给admin和index模块分别写特定的配置, 那么首先新建conf/admin/config.phpconf/index/config.php, 在分别的模块配置中还是可以新建extra目录等等, 这时候分别填写不同的配置项试试吧。

  • 动态配置就是使用助手函数config()动态设置配置项。如果你想让某个配置项只在某个控制器中可以访问, 那么你需要在该控制器的构造方法中使用助手函数conifg('key', 'value')设置配置项, 当然你也可以只在某个方法中动态设置这个配置项。

  • 前面关于输出配置项都是使用config()这个助手函数, 你也可以使用Config类提供的静态方法get()获取。直接路径法请使用\think\Config::get(), 但是更推荐先使用use \think\Config;使用根命名空间, 再使用Config类的静态方法获取或者设置相关参数如dump(\think\Config::get('app_debug'))获取bool值。

  • TP5的默认助手函数都在thinkphp/helper.php中, 所有助手函数都事先判断了是否存在该函数。也就是说, 如果你面对一个自定义了config()并大量使用该函数的项目, 那么你应该Config类的静态方法去重构。

  • Config类的set()静态方法或者助手函数config()第三个参数都可以传递配置作用域, 获取配置value也需要添加第二个作用域参数。

  • 环境的配置首先可以使用PHP的$_ENV获取系统的环境变量(经过我的测试这样无法获取.env中定义的环境变量, 但使用TP5的\think\ENV::get()可以获取), 也可以在项目根目录添加默认会被加载的.env文件并以ini配置文件的方式写上环境变量值。这里输出会进行大小写转换, 前缀添加(thinkphp/base.php)和组名转换。使用$_ENV['key']获取不存在的环境变量会报错, 使用\think\ENV::get('key')获取不存在的环境变量会返回NULL。获取分组下的值可以使用group_keygroup.key两种写法。

  • 将TP5的配置和ENV环境变量类组合在一起, 可以在配置文件中使用'app_status' => \think\Env::get('app_status', 'dev')这种写法, 如果未定义环境变量就是用dev。

坚持原创技术分享,您的支持将鼓励我继续创作!
0%