代码之家  ›  专栏  ›  技术社区  ›  Dirk J. Faber

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

  •  2
  • Dirk J. Faber  · 技术社区  · 7 年前

    我正在使用一个不是为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 回复  |  直到 7 年前
        1
  •  6
  •   Nikita Leshchev    7 年前

    对。这是可能的。如果要使用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',
    ];
    

    2.在中配置服务 services.yaml :

    services:
      App\TntSearchHelper:
        arguments:
          - '%env(MYSQL_HOST)%'
          - '%env(MYSQL_DB)%'
          - '%env(MYSQL_LOGIN)%'
          - '%env(MYSQL_PASSWORD)%'
    

    改变你的 __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;
    }
    

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