symfony4在服务中使用.env配置变量

时间:2018-07-23 12:39:31

标签: symfony symfony4

我使用的不是特别用于symfony的软件包(TNTsearch),并将我要使用的所有功能放在了我称为TNTsearchHelper.php的服务中。此服务需要一些变量,包括可以在.env文件中找到的变量。我目前在我的课程中定义和构造这些内容:

class TntSearchHelper
{
    public function __construct(EntityManagerInterface $em)
    {
        $this->em = $em;

        $config = [
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'databasename',
            'username'  => 'user',
            'password'  => 'pw',
            'storage'   => 'my/path/to/file',
            'charset'   => 'utf8',
            'collation' => 'utf8_general_ci',
        ];

        $this->config = $config;
    }

我真正想做的是简单地使用.env文件中设置的数据库变量。有什么办法吗?该服务未在services.yaml中注册,因为该服务不需要使用autowire: true选项,因此在config中我的服务没有任何配置选项/文件,我是否想知道可以保持这种方式。

1 个答案:

答案 0 :(得分:6)

是的。这是可能的。如果要使用env变量进行配置,则有两个选择:

1。使用4b/4a G/T

getenv

2。在$config = [ 'driver' => 'mysql', 'host' => getenv('MYSQL_HOST'), 'database' => getenv('MYSQL_DB'), 'username' => getenv('MYSQL_LOGIN'), 'password' => getenv('MYSQL_PASSWORD'), 'storage' => 'my/path/to/file', 'charset' => 'utf8', 'collation' => 'utf8_general_ci', ]; 中配置服务:

services.yaml

然后将您的services: App\TntSearchHelper: arguments: - '%env(MYSQL_HOST)%' - '%env(MYSQL_DB)%' - '%env(MYSQL_LOGIN)%' - '%env(MYSQL_PASSWORD)%' 函数更改为此:

__construct

还要确保设置所有这些env变量,因为默认情况下public function __construct(string $host, string $db, string $login, string $password, EntityManagerInterface $em) { $this->em = $em; $config = [ 'driver' => 'mysql', 'host' => $host, 'database' => $db, 'username' => $login, 'password' => $password, 'storage' => 'my/path/to/file', 'charset' => 'utf8', 'collation' => 'utf8_general_ci', ]; $this->config = $config; } 文件中只有DATABASE_URL个变量