我正在使用一个不是特别为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
并想知道我是否可以保持这种方式.
是.这是可能的.如果要使用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