Skip to content
Advertisement

How to use .env file in smarty?

I am new to smarty template. My all database settings are in /inc/settings/DSOPSettings.local.php but Every time I get pull from git for changes It overrides.

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.

My .env file :

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

My 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!

Advertisement

Answer

I am searching a way to load env in smarty. I found it and implemented as follow.

.env

DB_WRITE_USER=root
DB_WRITE_PASS=test
DB_WRITE_DBASE_DEV=storytalk

I have created one class to load all .env variables. 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;
    }
}

Load it in any file as follow :

$env = new EnvironmentSettingsEnv();
$env->load(INSTALLED_ROOT_PATH.INSTALLED_PATH."/.env"); 

Now use it with getenv() function. Ex. getenv('DB_WRITE_USER')

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement