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

Команда make:messenger-middleware

Команда make:messenger-middleware создаёт новый класс middleware для компонента Messenger. Middleware позволяет перехватывать сообщения при отправке или обработке и выполнять над ними дополнительные действия: логирование, изменение, фильтрацию, замер времени и многое другое. Первым параметром передаётся имя создаваемого класса. Команда генерирует файл в каталоге src/Messenger/Middleware и автоматически регистрирует его в конфигурации Messenger.

Middleware в Messenger бывают двух типов: для отправки сообщений в шину (bus middleware) и для обработки сообщений в транспорте (transport middleware). По умолчанию команда создаёт middleware для обработки в транспорте.

Синтаксис

php bin/console make:messenger-middleware <name>

Пример

Давайте создадим middleware с именем AuditMiddleware:

php bin/console make:messenger-middleware AuditMiddleware

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

created: src/Messenger/Middleware/AuditMiddleware.php Success!

Будет создан следующий класс:

<?php namespace AppMessengerMiddleware; use SymfonyComponentMessengerEnvelope; use SymfonyComponentMessengerMiddlewareMiddlewareInterface; use SymfonyComponentMessengerMiddlewareStackMiddlewareInterface as StackMiddlewareInterface; class AuditMiddleware implements MiddlewareInterface { public function handle(Envelope $envelope, StackMiddlewareInterface $stack): Envelope { // do something before handling the message $envelope = $stack->next()->handle($envelope, $stack); // do something after handling the message return $envelope; } } ?>

Метод handle вызывается для каждого сообщения. Код до вызова $stack->next()->handle выполняется перед обработкой сообщения, а код после - после обработки.

Пример

Давайте добавим логирование в созданный middleware:

<?php namespace AppMessengerMiddleware; use PsrLogLoggerInterface; use SymfonyComponentMessengerEnvelope; use SymfonyComponentMessengerMiddlewareMiddlewareInterface; use SymfonyComponentMessengerMiddlewareStackMiddlewareInterface as StackMiddlewareInterface; class AuditMiddleware implements MiddlewareInterface { private LoggerInterface $logger; public function __construct(LoggerInterface $logger) { $this->logger = $logger; } public function handle(Envelope $envelope, StackMiddlewareInterface $stack): Envelope { $this->logger->info('Message received', [ 'message' => $envelope->getMessage()::class, ]); $envelope = $stack->next()->handle($envelope, $stack); $this->logger->info('Message handled', [ 'message' => $envelope->getMessage()::class, ]); return $envelope; } } ?>

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

["Message received", "Message handled"]

Пример

Давайте создадим middleware для шины сообщений. Для этого используется опция --bus:

php bin/console make:messenger-middleware ValidationMiddleware --bus

Будет создан класс, реализующий интерфейс middleware для шины:

<?php namespace AppMessengerMiddleware; use SymfonyComponentMessengerEnvelope; use SymfonyComponentMessengerMiddlewareMiddlewareInterface; use SymfonyComponentMessengerMiddlewareStackMiddlewareInterface as StackMiddlewareInterface; class ValidationMiddleware implements MiddlewareInterface { public function handle(Envelope $envelope, StackMiddlewareInterface $stack): Envelope { // validate the message before dispatching return $stack->next()->handle($envelope, $stack); } } ?>

Пример

После создания middleware его необходимо зарегистрировать в конфигурации Messenger. Давайте добавим его в файл config/packages/messenger.yaml:

framework: messenger: buses: default: middleware: - AppMessengerMiddlewareAuditMiddleware - AppMessengerMiddlewareValidationMiddleware

Порядок перечисления middleware определяет порядок их вызова. Первый в списке middleware будет вызван первым.

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

  • команда make:message,
    которая создаёт класс сообщения для Messenger
  • команда messenger:consume,
    которая запускает обработку сообщений из очереди
  • команда debug:messenger,
    которая показывает список зарегистрированных обработчиков
  • команда messenger:stats,
    которая выводит статистику по транспортам
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить