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

Класс HandleTrait

Класс HandleTrait используется в классах, которые хотят иметь возможность отправлять сообщения в шину синхронно и получать результат. Он добавляет метод handle, который принимает объект сообщения, отправляет его через MessageBusInterface и возвращает результат выполнения обработчика.

Синтаксис

use Symfony\Component\Messenger\HandleTrait; class SomeService { use HandleTrait { handle as private doHandle; } public function __construct(MessageBusInterface $messageBus) { $this->messageBus = $messageBus; } }

Пример

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

<?php namespace App\Service; use Symfony\Component\Messenger\HandleTrait; use Symfony\Component\Messenger\MessageBusInterface; class ArticleService { use HandleTrait; public function __construct(MessageBusInterface $messageBus) { $this->messageBus = $messageBus; } public function getArticleTitle(int $id): string { $query = new GetArticleTitleQuery($id); $res = $this->handle($query); return $res; } } ?>

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

"article"

Пример

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

<?php namespace App\Message; class GetArticleTitleQuery { public function __construct( private int $id, ) { } public function getId(): int { return $this->id; } } ?>
<?php namespace App\MessageHandler; use App\Message\GetArticleTitleQuery; use Symfony\Component\Messenger\Attribute\AsMessageHandler; #[AsMessageHandler] class GetArticleTitleQueryHandler { public function __invoke(GetArticleTitleQuery $query): string { return 'article ' . $query->getId(); } } ?>
<?php namespace App\Service; use App\Message\GetArticleTitleQuery; use Symfony\Component\Messenger\HandleTrait; use Symfony\Component\Messenger\MessageBusInterface; class ArticleService { use HandleTrait; public function __construct(MessageBusInterface $messageBus) { $this->messageBus = $messageBus; } public function getArticleTitle(int $id): string { $query = new GetArticleTitleQuery($id); $res = $this->handle($query); return $res; } } ?>

Результат выполнения кода для $id = 1:

"article 1"

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

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