iproger
@iproger
Безответственный гений

Как использовать интерфейс в DI Symfony 3?

Пытаюсь передать класс в конструктор. Настройки все выставлены.

Так работает (ShipRepository implements IShipRepository ):
public function __construct(\AppBundle\Infrastructure\Persistence\ShipRepository $shipRepo)


Так не работает (IShipRepository - интерфейс):
public function __construct(IShipRepository $shipRepo)


Почему нельзя указывать интерфейс для требования класса?

Код ошибки:
Type error: Argument 1 passed to AppBundle\Newsletter\NewsletterManager::__construct() must be an instance of AppBundle\Domain\Repositories\IShipRepository, instance of AppBundle\Infrastructure\Persistence\ShipRepository given, called in \var\cache\dev\appDevDebugProjectContainer.php on line 338
500 Internal Server Error - FatalThrowableError


Классы:
по большей части такие же как в примере ddd.

UPD: Не понятно почему система требует передать конкретно интерфейс, но не принимает класс имплементирующий нужный интерфейс.
  • Вопрос задан
  • 423 просмотра
Пригласить эксперта
Ответы на вопрос 3
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Можно. Вы что-то делаете не так. Код классов и интерфейса не приведёны, ошибка не приведена, конфиг контейнера не приведён - о чём разговор вообще?
Ответ написан
Комментировать
pchelkin
@pchelkin
быдлокодер
public function __construct(IShipRepository $shipRepo)
Чтобы использовать такую запись, надо сначала сделать use.
Ответ написан
sggr
@sggr
PHP, Ruby, GO
Очевидно AppBundle\Infrastructure\Persistence\ShipRepository не имплементит IShipRepository.
Ответ написан
Ваш ответ на вопрос

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

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