tp6的env函数剥离到koseven框架
国产的thinkphp 6.0+是一个很大的突破,直接从设计思想与国际接轨,并且在一定程度上更加符合国人(也可谓之超越了)
env方法是一个不错的实现,因.env文件是git忽略的,所以我经常会在同级目录新建.env.local
,.env.test
,.env.prod
文件,保存各种环境的数据库会话等信息。
koseven是kohana的php 7升级版,觉得tp的这个env函数好用,特此挪用。
挪用方法很简单,如果不新增common.php
文件,可直接将下面的核心函数放到bootstrap.php
文件的路由之前即可。
推荐新建一个common.php
和bootstrap.php
同级,由bootstrap.php
引入。
入口设置
修改bootstrap.php
文件,放到Core核心引入语句的下面即可,如:
// Load the core Kohana class
require SYSPATH.'classes/Kohana/Core'.EXT;
...
/**
* such as env fn etc..
*/
require APPPATH.'common'.EXT;
...
核心函数
经过上面的引入之后,在common.php
文件新增如下函数:
$_ENV2 = [];
if (!function_exists('env')) {
/**
* 获取环境变量值
* @access public
* @param string $name 环境变量名(支持二级 .号分割)
* @param string $default 默认值
* @return mixed
*/
function env(string $name = null, $default = null)
{
if (empty($_ENV2)){
try{
$_ENV2 = parse_ini_file(DOCROOT . '.env', true);
}catch (ErrorException $e){
return $default;
}
$_ENV2 = array_change_key_case($_ENV2, CASE_UPPER);
foreach ($_ENV2 as $key => $val) {
if (is_array($val)) {
foreach ($val as $k => $v) {
$_ENV2[$key . '_' . strtoupper($k)] = $v;
}
} else {
$_ENV2[$key] = $val;
}
}
}
if (is_null($name)) {
return $_ENV2;
}//var_dump($_ENV2);
$name = strtoupper(str_replace('.', '_', $name));
if (isset($_ENV2[$name])) {
return $_ENV2[$name];
}
return $default;
}
}
函数比较简单,就是有一个类全局变量$_ENV2
接住根目录.env
文件的一些变量,然后递归转换。
这个用法跟tp的env函数用法一样,就不累赘文档了。