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

Параметр method атрибута AsMessageHandler

Атрибут AsMessageHandler вешается на класс обработчика сообщения. По умолчанию Symfony вызывает метод __invoke этого класса. Параметр method позволяет явно указать имя другого метода, который должен обрабатывать сообщение. Это удобно, когда класс содержит несколько методов-обработчиков или когда имя метода отличается от __invoke.

Синтаксис

#[AsMessageHandler(method: 'methodName')]

Пример

Давайте создадим класс-обработчик с методом handle и укажем его через параметр method:

<?php namespace AppMessageHandler; use AppMessageArticleMessage; use SymfonyComponentMessengerAttributeAsMessageHandler; #[AsMessageHandler(method: 'handle')] class ArticleMessageHandler { public function handle(ArticleMessage $message): void { echo 'handled: ' . $message->getText(); } } ?>

Теперь при отправке сообщения ArticleMessage Symfony вызовет метод handle, а не __invoke.

Пример

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

<?php namespace AppController; use AppMessageArticleMessage; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentMessengerMessageBusInterface; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article', name: 'article_send')] public function send(MessageBusInterface $bus): Response { $bus->dispatch(new ArticleMessage('hello')); return new Response('sent'); } } ?>

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

handled: hello

Пример

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

<?php namespace AppMessageHandler; use AppMessageArticleMessage; use AppMessageUserMessage; use SymfonyComponentMessengerAttributeAsMessageHandler; class MultiMessageHandler { #[AsMessageHandler(method: 'handleArticle')] public function handleArticle(ArticleMessage $message): void { echo 'article: ' . $message->getText(); } #[AsMessageHandler(method: 'handleUser')] public function handleUser(UserMessage $message): void { echo 'user: ' . $message->getName(); } } ?>

При отправке ArticleMessage вызовется метод handleArticle, а при отправке UserMessage - метод handleUser.

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

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