我使用的不是特别用于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
中我的服务没有任何配置选项/文件,我是否想知道可以保持这种方式。
答案 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
个变量