Метод createFromThrowable
Метод createFromThrowable класса FlattenException
преобразует любое исключение, реализующее
Throwable, в плоский объект
FlattenException. Первым параметром
передаётся исходное исключение. Вторым
необязательным параметром можно передать
HTTP-код статуса, третьим - массив заголовков.
Метод удобен для сериализации исключений и
передачи их через HTTP в формате JSON.
Синтаксис
FlattenException::createFromThrowable(Throwable $exception, ?int $statusCode = null, array $headers = [])
Пример
Давайте создадим исключение и преобразуем
его в объект FlattenException:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\ErrorHandler\Exception\FlattenException;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
try {
throw new \RuntimeException('article error');
} catch (\Throwable $e) {
$flat = FlattenException::createFromThrowable($e);
return new Response($flat->getMessage());
}
}
}
?>
Результат выполнения кода:
"article error"
Пример
Давайте передадим HTTP-код статуса вторым
параметром и выведем его через метод
getStatusCode:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\ErrorHandler\Exception\FlattenException;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
try {
throw new \RuntimeException('article error');
} catch (\Throwable $e) {
$flat = FlattenException::createFromThrowable($e, 500);
return new Response((string) $flat->getStatusCode());
}
}
}
?>
Результат выполнения кода:
"500"
Пример
Давайте передадим массив заголовков третьим
параметром и выведем их через метод
getHeaders:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\ErrorHandler\Exception\FlattenException;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
try {
throw new \RuntimeException('article error');
} catch (\Throwable $e) {
$flat = FlattenException::createFromThrowable(
$e,
500,
['X-Custom' => 'abcde']
);
return new Response($flat->getHeaders()['X-Custom']);
}
}
}
?>
Результат выполнения кода:
"abcde"
Смотрите также
-
класс
FlattenException,
который представляет исключение в плоском виде -
метод
getStatusCode,
который возвращает HTTP-код статуса исключения -
метод
getMessage,
который возвращает текст сообщения исключения -
метод
getTrace,
который возвращает стек вызовов исключения