Учитывая класс 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 для автоматического подключения, и они, кажется, одинаковы?
Спасибо!






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