Класс Autowire с интерфейсом в качестве параметра в Symfony4

Учитывая класс Publisher следующим образом:

<?php

namespace App\Util\Publisher;


use Symfony\Component\Mercure\Update;
use Symfony\Component\Messenger\MessageBusInterface;

class Publisher
{

    protected $topic = null;
    protected $bus;

    /**
     * Publisher constructor.
     * @param MessageBusInterface $bus
     */
    public function __construct(MessageBusInterface $bus)
    {
        $this->topic = getenv('TOPIC_MAIN_URL');
        $this->bus = $bus;
    }

    ...

}

Я хотел бы автоматически подключить его к своим контроллерам следующим образом:

/**
 * @Route("/_exp/_exp", name = "exp")
 */
public function expAction(Publisher $publisher)
{
    ...
}

и я добавил это в свой services.yaml:

Symfony\Component\Messenger\MessageBusInterface: ~

App\Util\Publisher\Publisher:
    autowire: true
    arguments: ['@Symfony\Component\Messenger\MessageBusInterface']

Но я получаю сообщение об ошибке:

Cannot instantiate interface Symfony\Component\Messenger\MessageBusInterface

Это связано с MessageBusInterface или я что-то не так делаю с автопроводкой. Я подписался на Документы Symfony для автоматического подключения, и они, кажется, одинаковы?

Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
772
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что сервис MessageBusInterface уже объявлен компонентом Symfony Messenger. Попробуйте удалить Symfony\Component\Messenger\MessageBusInterface: ~ из services.yaml, иначе вы переопределите определение по умолчанию.

Примечание для уточнения: служба MessageBusInterface на самом деле не существует, она является псевдонимом службы «шина по умолчанию». Вы можете объявить другие шины, см. документация

Другие вопросы по теме