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

Класс HandledStamp

Класс HandledStamp представляет собой штамп (stamp), который добавляется в конверт Envelope после успешной обработки сообщения. Штамп содержит результат, возвращённый методом __invoke обработчика, а также имя класса этого обработчика. Основное применение - извлечение результата синхронной обработки сообщения через шину.

Синтаксис

<?php use Symfony\Component\Messenger\Stamp\HandledStamp; $stamp = new HandledStamp(mixed $result, string $handlerName); $stamp->getResult(); $stamp->getHandlerName(); ?>

Пример

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

<?php namespace App\Message; class ArticleMessage { public function __construct( public readonly string $text, ) { } } ?>
<?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->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\Messenger\Stamp\HandledStamp; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(MessageBusInterface $bus): Response { $envelope = $bus->dispatch(new ArticleMessage('abcde')); $stamp = $envelope->last(HandledStamp::class); return new Response($stamp->getResult()); } } ?>

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

handled: abcde

Пример

Давайте извлечём имя обработчика, который обработал сообщение:

<?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\Messenger\Stamp\HandledStamp; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(MessageBusInterface $bus): Response { $envelope = $bus->dispatch(new ArticleMessage('abcde')); $stamp = $envelope->last(HandledStamp::class); return new Response($stamp->getHandlerName()); } } ?>

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

"App\MessageHandler\ArticleMessageHandler"

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

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