РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1320 of 1361 menu

Класс MessageBus

Класс MessageBus представляет собой шину сообщений, через которую происходит отправка сообщений в Messenger. Он реализует интерфейс MessageBusInterface и предоставляет метод dispatch для передачи сообщения в обработчики или транспорты. Экземпляр класса создаётся автоматически через контейнер зависимостей.

Синтаксис

use Symfony\Component\Messenger\MessageBusInterface; public function __construct(MessageBusInterface $bus) { $this->bus = $bus; }

Пример

Давайте создадим простой класс сообщения и отправим его через шину:

<?php namespace App\Message; class ArticleMessage { private string $text; public function __construct(string $text) { $this->text = $text; } public function getText(): string { return $this->text; } } ?>

Теперь создадим контроллер, который внедряет шину и отправляет сообщение:

<?php namespace App\Controller; use App\Message\ArticleMessage; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article', name: 'article_send')] public function send(MessageBusInterface $bus): Response { $message = new ArticleMessage('hello'); $bus->dispatch($message); return new Response('sent'); } } ?>

Результат выполнения кода для адреса /article:

"sent"

Пример

Давайте отправим сообщение и получим результат его обработки через объект Envelope:

<?php namespace App\Controller; use App\Message\ArticleMessage; use App\MessageHandler\ArticleMessageHandler; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Messenger\Stamp\HandledStamp; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/handle', name: 'article_handle')] public function handle(MessageBusInterface $bus): Response { $envelope = $bus->dispatch(new ArticleMessage('abcde')); $stamp = $envelope->last(HandledStamp::class); $res = $stamp->getResult(); return new Response($res); } } ?>

Класс обработчика для сообщения:

<?php namespace App\MessageHandler; use App\Message\ArticleMessage; use Symfony\Component\Messenger\Attribute\AsMessageHandler; #[AsMessageHandler] class ArticleMessageHandler { public function __invoke(ArticleMessage $message): string { return 'handled: ' . $message->getText(); } } ?>

Результат выполнения кода для адреса /article/handle:

"handled: abcde"

Смотрите также

  • метод dispatch,
    который отправляет сообщение в шину
  • класс Envelope,
    который оборачивает сообщение и его штампы
  • атрибут AsMessageHandler,
    который помечает класс как обработчик
  • класс HandledStamp,
    который хранит результат обработки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить