如何在 smarty 中使用 .env 文件?

问题描述

我是 smarty 模板的新手。我的所有数据库设置都在 /inc/settings/DSOPSettings.local.PHP 中,但是每次我从 git 中提取更改时它都会覆盖。

我试图在 smarty 模板项目根目录中设置 .env 文件试图在 DSOPSettings.local.PHP 文件获取 env 变量,但它对我不起作用。

我的 .env 文件

DB_WRITE_HOST=localhost
DB_WRITE_USER=root
DB_WRITE_PASS=test
DB_WRITE_DBASE_DEV=storytalk

我的 DSOPSettings.local.PHP :

define('DB_WRITE_HOST',env('DB_WRITE_HOST'));
define('DB_WRITE_USER',env('DB_WRITE_USER'));
define('DB_WRITE_PASS',env('DB_WRITE_PASS'));
define('DB_WRITE_DBASE_DEV',env('DB_WRITE_DBASE_DEV'));

我也尝试获取如下环境变量,但没有成功。

define('DB_WRITE_HOST',getenv('DB_WRITE_HOST'));
define('DB_WRITE_USER',getenv('DB_WRITE_USER'));
define('DB_WRITE_PASS',getenv('DB_WRITE_PASS')));
define('DB_WRITE_DBASE_DEV',getenv('DB_WRITE_DBASE_DEV'));

我怎样才能做到这一点? 提前致谢!

解决方法

我正在寻找一种在 smarty 中加载 env 的方法。我发现它并按如下方式实现。

.env

DB_WRITE_USER=root
DB_WRITE_PASS=test
DB_WRITE_DBASE_DEV=storytalk

我创建了一个类来加载所有 .env 变量。环境.php

<?php
namespace EnvironmentSettings;
class Env
{
    public function __construct()
    {
    }
    
    public function load($path)
    {
        if (!file_exists($path)) {
            throw new \InvalidArgumentException(sprintf('%s does not exist',$path));
        }
        
        if (!is_readable($path)) {
            throw new \RuntimeException(sprintf('%s file is not readable',$this->path));
        }

        $lines = file($path,FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
        foreach ($lines as $line) {

            if (strpos(trim($line),'#') === 0) {
                continue;
            }

            list($name,$value) = explode('=',$line,2);
            $name = trim($name);
            $value = trim($value);

            if (!array_key_exists($name,$_SERVER) && !array_key_exists($name,$_ENV)) {
                putenv(sprintf('%s=%s',$name,$value));
                $_ENV[$name] = $value;
                $_SERVER[$name] = $value;
            }
        }
        return true;
    }
}

将其加载到任何文件中,如下所示:

$env = new EnvironmentSettings\Env();
$env->load(INSTALLED_ROOT_PATH.INSTALLED_PATH."/.env"); 

现在将它与 getenv() 函数一起使用。前任。 getenv('DB_WRITE_USER')