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

Метод withoutAll класса Envelope

Метод withoutAll класса Envelope удаляет из конверта все штампы указанного типа. Первым параметром передаётся имя класса штампа, который нужно убрать. Метод возвращает новый объект Envelope, а исходный конверт остаётся без изменений.

Конверт в Symfony - это обёртка вокруг сообщения, которая хранит само сообщение и набор штампов. Штампы несут служебную информацию: задержку, имя шины, транспорт и так далее. Метод withoutAll позволяет снять сразу все штампы одного типа, в отличие от withoutStampsOfType, который работает аналогично, и with, который, наоборот, добавляет штамп.

Синтаксис

public function withoutAll(string $stampFqcn): Envelope

Параметр $stampFqcn - это полное имя класса штампа, например Symfony\Component\Messenger\Stamp\DelayStamp.

Пример

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

<?php namespace App\Message; class ArticleMessage { public function __construct( public string $title = 'abcde', ) { } } ?>
<?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\Messenger\Stamp\BusNameStamp; class ArticleController extends AbstractController { public function index(): Response { $message = new ArticleMessage('article'); $envelope = new Envelope($message); $envelope = $envelope->with(new DelayStamp(1000)); $envelope = $envelope->with(new DelayStamp(2000)); $envelope = $envelope->with(new BusNameStamp('command.bus')); $res = $envelope->withoutAll(DelayStamp::class); echo count($envelope->all(DelayStamp::class)); echo ' '; echo count($res->all(DelayStamp::class)); echo ' '; echo count($res->all(BusNameStamp::class)); return new Response('ok'); } } ?>

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

"2 0 1"

Как видно из результата, исходный конверт сохранил оба штампа DelayStamp, а новый конверт не содержит ни одного из них, при этом штамп BusNameStamp остался на месте.

Пример

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

<?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\MessageBusInterface; use Symfony\Component\Messenger\Stamp\DelayStamp; class ArticleController extends AbstractController { public function index(MessageBusInterface $bus): Response { $message = new ArticleMessage('article'); $envelope = new Envelope($message); $envelope = $envelope->with(new DelayStamp(5000)); $envelope = $envelope->withoutAll(DelayStamp::class); $bus->dispatch($envelope); return new Response('sent'); } } ?>

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

sent

Сообщение уйдёт в шину без задержки, так как все штампы DelayStamp были удалены из конверта.

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

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