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

Метод getWrappedExceptions

Метод getWrappedExceptions принадлежит классу HandlerFailedException и возвращает массив исключений, которые были выброшены обработчиками сообщения. Когда сообщение проходит через шину и один или несколько обработчиков падают с ошибкой, Symfony оборачивает их в исключение HandlerFailedException. Метод getWrappedExceptions позволяет извлечь исходные исключения и работать с каждым из них отдельно.

Первым параметром можно передать имя класса исключения, чтобы отфильтровать результаты. Вторым параметром передаётся флаг $asString, который при значении true вернёт имена классов вместо объектов исключений.

Синтаксис

public function getWrappedExceptions(?string $className = null, bool $asString = false): array

Пример

Давайте создадим обработчик, который выбрасывает исключение, и посмотрим, что вернёт метод getWrappedExceptions:

<?php namespace App\MessageHandler; use App\Message\ArticleMessage; use Symfony\Component\Messenger\Attribute\AsMessageHandler; #[AsMessageHandler] class ArticleMessageHandler { public function __invoke(ArticleMessage $message): void { throw new \RuntimeException('handler failed'); } } ?>

Теперь отправим сообщение через шину и перехватим исключение:

<?php namespace App\Controller; use App\Message\ArticleMessage; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Messenger\Exception\HandlerFailedException; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(MessageBusInterface $bus): Response { try { $bus->dispatch(new ArticleMessage('abcde')); } catch (HandlerFailedException $e) { $res = $e->getWrappedExceptions(); foreach ($res as $exception) { echo $exception->getMessage(); } } return new Response(); } } ?>

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

"handler failed"

Пример

Давайте отфильтруем исключения по классу RuntimeException:

<?php namespace App\Controller; use App\Message\ArticleMessage; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Messenger\Exception\HandlerFailedException; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(MessageBusInterface $bus): Response { try { $bus->dispatch(new ArticleMessage('abcde')); } catch (HandlerFailedException $e) { $res = $e->getWrappedExceptions(\RuntimeException::class); foreach ($res as $exception) { echo $exception->getMessage(); } } return new Response(); } } ?>

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

"handler failed"

Пример

Давайте передадим второй параметр $asString как true, чтобы получить имена классов исключений:

<?php namespace App\Controller; use App\Message\ArticleMessage; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Messenger\Exception\HandlerFailedException; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(MessageBusInterface $bus): Response { try { $bus->dispatch(new ArticleMessage('abcde')); } catch (HandlerFailedException $e) { $res = $e->getWrappedExceptions(null, true); foreach ($res as $className) { echo $className; } } return new Response(); } } ?>

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

"RuntimeException"

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

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