我有一个带有此构造函数的类:
public function __construct(string $username, string $database, string $password, string $host)
{
$this->username = $username;
$this->database = $database;
$this->password = $password;
$this->host = $host;
}
在我的服务配置文件中,我添加了:
App\DataFixtures\Migration\Database\DatabaseConnector:
arguments:
$username: '%env(USERNAME_PROD)%'
$password: '%env(PASSWORD_PROD)%'
$database: '%env(DATABASE_PROD)%'
$host: '%env(HOST_PROD)%'
我已经尝试禁用并启用自动配置和自动装配功能,但是没有任何方法可以解决问题。
我的配置文件确实已加载。
答案 0 :(得分:0)
这是由于symfony的自动装配。当您将字符串作为服务的参数注入然后使用自动装配时,Symfony不知道要注入哪个字符串。
您可以禁用自动装配指定的服务。请注意,在services.yaml文件中,您排除了用于自动装配的服务文件或文件夹。
例如,对于我来说,我添加了以下行:
exclude: '../src/DataFixtures/Migration/*'
答案 1 :(得分:0)
您应明确配置其值
...可能在构造方法内,而不是将其作为参数传递。 看看The Dotenv Component
如果您的数据库凭据已经存储在.env中,则可以从类的构造函数中直接访问:
public function __construct()
{
$this->username = $_ENV['USERNAME_PROD'];
$this->database = $_ENV['DATABASE_PROD'];
$this->password = $_ENV['PASSWORD_PROD'];
$this->host = $_ENV['HOST_PROD'];
}