gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:22:31 25 4
gpt4 key购买 nike

我使用的包不是专门为 symfony (TNTsearch) 制作的,并且已经将我想使用的所有功能都放在我称为 TNTsearchHelper.php 的服务中.此服务需要一些变量,包括一些可以在 .env 中找到的变量。文件。我目前在我的类(class)中定义和构建这些:

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 中没有任何用于我的服务的配置选项/文件并想知道我是否可以保持这种状态。

最佳答案

是的。这是可能的。如果要使用 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 中的变量默认文件

关于symfony4 在服务中使用 .env 配置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51479043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com