Невозможно автоматически подключить службу "X": аргумент "$ param" метода "__construct ()" имеет тип "string", вы должны явно указать его значение - PullRequest
0 голосов
/ 10 октября 2019

У меня есть класс с этим конструктором:

    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 голосов
/ 10 октября 2019

Вы должны явно указать его значение

... возможно, внутри метода конструктора, вместо того, чтобы передавать его в качестве параметра. Взгляните на Компонент Dotenv

Если ваши учетные данные базы данных уже сохранены в .env, вы можете получить доступ непосредственно из конструктора вашего класса:

public function __construct()
{
    $this->username = $_ENV['USERNAME_PROD'];
    $this->database = $_ENV['DATABASE_PROD'];
    $this->password = $_ENV['PASSWORD_PROD'];
    $this->host = $_ENV['HOST_PROD'];
}
0 голосов
/ 10 октября 2019

Это из-за автопроводки symfony. Когда вы вводите строку в качестве параметра службы, а затем используете автоматическое подключение, Symfony не знает, какую строку вводить.

Вы можете отключить автоматическое подключение указанной службы. Имейте в виду, что в вашем файле services.yaml вы исключаете служебный файл или папку для автоматической проводки.

Например, в моем случае я добавил эту строку:

exclude: '../src/DataFixtures/Migration/*'
...