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.phpbootstrap.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函数用法一样,就不累赘文档了。


原文链接:https://blog.yongit.com/note/683687.html