@gupovski

Symfony 4 autowiring и наследование?

Как правильно использовать autowiring в дочернем классе?

Есть абстрактный класс где автовайрингом подключаются некоторые сервисы, я пытаюсь добиться того, чтобы в дочернем классе все сервисы подгрузились, но еще нужно добавить зависимость сервиса только для конкретного класса. При определении конструктора в дочернем классе, автовайринг ломается. При вызове parent::__construct(), возникает ошибка о не хватке параметров. Подскажите как этого можно добиться?
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
@Flying
Поскольку вы наследуете свой класс от абстрактного класса - иницализация parent'а - ваша прямая обязанность (см. сноску после первого абзаца). Таким образом, если абстрактный класс принимает свои зависимости через конструктор - вам необходимо принимать их же и передавать выше по иерархии наследования.

Т.е. если абстрактный класс выглядит как:
abstract class AbstractExample 
{
  public function __construct(Foo $foo, Bar $bar) 
  {
  }
}

а вам необходима ещё дополнительная зависимость Baz $baz, то ваш конструктор должен выглядеть примерно так:
class MyExample extends AbstractExample 
{
  public function __construct(Foo $foo, Bar $bar, Baz $baz) 
  {
    parent::__construct($foo, $bar);
    // ... и далее ваша логика ...
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@EvgeniiR
https://github.com/EvgeniiR
1. Требовать в конструктор все необходимые для инициализации родителя зависимости. Наследуясь вы берёте на себя обязательства инициализировать экземпляр класс родителя, соблюдать контракт, судя по вопросу вам стоит обратить внимание на п.2:

2. Избавиться от наследовния - лучше во всех планах, в подавляющем большинстве(если не в 100%) ситуаций.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы