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

Метод wrap

Метод wrap класса Envelope создаёт новый конверт из объекта сообщения. Первым параметром передаётся само сообщение, вторым - массив штампов. Штампы - это метаданные, которые управляют поведением сообщения при отправке через шину. Метод возвращает объект Envelope, готовый к передаче в шину через метод dispatch.

Синтаксис

Envelope::wrap(object $message, array $stamps = []): Envelope

Пример

Давайте обернём простое сообщение без штампов:

<?php namespace App\Message; class ArticleMessage { public function __construct( public string $title, ) { } } ?>

Теперь создадим конверт из этого сообщения:

<?php namespace App\Controller; use App\Message\ArticleMessage; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Messenger\Envelope; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(): Response { $message = new ArticleMessage('hello'); $envelope = Envelope::wrap($message); return new Response(get_class($envelope->getMessage())); } } ?>

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

"App\Message\ArticleMessage"

Пример

Давайте обернём сообщение с задержкой отправки через DelayStamp:

<?php namespace App\Controller; use App\Message\ArticleMessage; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\Stamp\DelayStamp; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/delay', name: 'article_delay')] public function delay(): Response { $message = new ArticleMessage('abcde'); $envelope = Envelope::wrap($message, [ new DelayStamp(5000), ]); $stamp = $envelope->last(DelayStamp::class); return new Response((string) $stamp->getDelay()); } } ?>

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

"5000"

Пример

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

<?php namespace App\Controller; use App\Message\ArticleMessage; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\Stamp\BusNameStamp; use Symfony\Component\Messenger\Stamp\DelayStamp; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/stamps', name: 'article_stamps')] public function stamps(): Response { $message = new ArticleMessage('user'); $envelope = Envelope::wrap($message, [ new DelayStamp(1000), new BusNameStamp('async'), ]); $delay = $envelope->last(DelayStamp::class); $bus = $envelope->last(BusNameStamp::class); return new Response($delay->getDelay() . ' ' . $bus->getBusName()); } } ?>

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

"1000 async"

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

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