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

Dir*_*ber 3 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;
    }
Run Code Online (Sandbox Code Playgroud)

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

Nik*_*hev 8

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

1.使用getenv:

$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',
];
Run Code Online (Sandbox Code Playgroud)

2.将您的服务配置为services.yaml:

services:
  App\TntSearchHelper:
    arguments:
      - '%env(MYSQL_HOST)%'
      - '%env(MYSQL_DB)%'
      - '%env(MYSQL_LOGIN)%'
      - '%env(MYSQL_PASSWORD)%'
Run Code Online (Sandbox Code Playgroud)

并将您的__construct功能更改为:

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;
}
Run Code Online (Sandbox Code Playgroud)

还要确保设置了所有这些env变量,因为默认情况下文件中只有DATABASE_URL变量.env