Метод last класса Envelope
Метод last класса Envelope возвращает последнюю метку указанного типа, добавленную в конверт. Первым параметром передаётся имя класса метки, например DelayStamp или HandledStamp. Если метка такого типа отсутствует, метод возвращает null. Конверт при этом не изменяется - возвращается лишь найденная метка.
Синтаксис
public function last(string $stampClass): ?StampInterface
Пример
Давайте создадим конверт с сообщением, добавим несколько меток задержки и получим последнюю из них:
<?php
namespace AppMessage;
class ArticleMessage
{
public function __construct(
public string $title = 'article'
) {
}
}
?>
<?php
namespace AppController;
use AppMessageArticleMessage;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentMessengerEnvelope;
use SymfonyComponentMessengerStampDelayStamp;
class ArticleController extends AbstractController
{
public function index(): Response
{
$envelope = new Envelope(new ArticleMessage('hello'));
$envelope = $envelope->with(new DelayStamp(1000));
$envelope = $envelope->with(new DelayStamp(5000));
$stamp = $envelope->last(DelayStamp::class);
return new Response((string) $stamp->getDelay());
}
}
?>
Результат выполнения кода:
"5000"
Пример
Давайте проверим поведение метода, когда метка указанного типа в конверте отсутствует:
<?php
namespace AppController;
use AppMessageArticleMessage;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentMessengerEnvelope;
use SymfonyComponentMessengerStampDelayStamp;
class ArticleController extends AbstractController
{
public function index(): Response
{
$envelope = new Envelope(new ArticleMessage('article'));
$stamp = $envelope->last(DelayStamp::class);
return new Response(var_export($stamp, true));
}
}
?>
Результат выполнения кода:
"NULL"
Пример
Давайте получим последнюю метку обработанного сообщения через HandledStamp:
<?php
namespace AppController;
use AppMessageArticleMessage;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentMessengerEnvelope;
use SymfonyComponentMessengerStampHandledStamp;
class ArticleController extends AbstractController
{
public function index(): Response
{
$envelope = new Envelope(new ArticleMessage('abcde'));
$envelope = $envelope->with(new HandledStamp('first', 'handler_one'));
$envelope = $envelope->with(new HandledStamp('second', 'handler_two'));
$stamp = $envelope->last(HandledStamp::class);
return new Response($stamp->getResult());
}
}
?>
Результат выполнения кода:
"second"
Смотрите также
-
класс
Envelope,
который оборачивает сообщение и его метки -
метод
all,
который возвращает все метки указанного типа -
метод
with,
который добавляет метку в конверт -
класс
DelayStamp,
который задаёт задержку обработки сообщения