简体   繁体   English

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

[英]How to use .env file in smarty?

I am new to smarty template.我是 smarty 模板的新手。 My all database settings are in /inc/settings/DSOPSettings.local.php but Every time I get pull from git for changes It overrides.我的所有数据库设置都在 /inc/settings/DSOPSettings.local.php 但每次我从 git 中获取更改时它都会覆盖。

I have tried to set.env file in smarty template project root tried to get env variables in DSOPSettings.local.php file but It's not working for me.我试图在 smarty 模板项目根目录中设置.env 文件试图在 DSOPSettings.local.php 文件中获取环境变量,但这对我不起作用。

My.env file:我的.env 文件:

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

My DSOPSettings.local.php:我的 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'));

I have also tried to get env variables as below but not working.我也尝试过如下获取环境变量但不工作。

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'));

How can I make this working?我怎样才能使它工作? Thanks in Advance!提前致谢!

I am searching a way to load env in smarty.我正在寻找一种在 smarty 中加载 env 的方法。 I found it and implemented as follow.我找到了它并按如下方式实现。

.env .env

DB_WRITE_USER=root
DB_WRITE_PASS=test
DB_WRITE_DBASE_DEV=storytalk

I have created one class to load all.env variables.我创建了一个 class 来加载 all.env 变量。 Env.php环境.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;
    }
}

Load it in any file as follow:将其加载到任何文件中,如下所示:

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

Now use it with getenv() function.现在将它与 getenv() function 一起使用。 Ex.前任。 getenv('DB_WRITE_USER')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM