无法自动装配服务“ X”:方法“ __construct()”的参数“ $ param”为类型字符串“ string”,您应显式配置其值

时间:2019-10-10 05:27:24

标签: symfony autowired

我有一个带有此构造函数的类:

    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)%'

我已经尝试禁用并启用自动配置和自动装配功能,但是没有任何方法可以解决问题。

我的配置文件确实已加载。

2 个答案:

答案 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'];
}