Исключение NotEncodableValueException
Исключение NotEncodableValueException относится к семейству исключений компонента Serializer.
Оно выбрасывается в момент, когда значение невозможно преобразовать в требуемый формат или
прочитать из него данные. Чаще всего это связано с ошибками в JSON, XML, CSV или YAML.
Первым параметром передаётся текст сообщения об ошибке. Исключение наследуется от
UnexpectedValueException, поэтому его можно перехватывать стандартным блоком catch.
Синтаксис
<?php
namespace Symfony\Component\Serializer\Exception;
class NotEncodableValueException extends UnexpectedValueException
{
public function __construct(string $message = '', int $code = 0, ?Throwable $previous = null)
{
}
}
?>
Пример
Давайте попробуем раскодировать некорректную JSON-строку через Serializer и перехватим исключение:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\Serializer\Exception\NotEncodableValueException;
class ArticleController extends AbstractController
{
public function index(SerializerInterface $serializer): Response
{
$json = '{"name": "abcde"';
try {
$res = $serializer->decode($json, 'json');
} catch (NotEncodableValueException $e) {
$res = 'Decode error: ' . $e->getMessage();
}
return new Response($res);
}
}
?>
Результат выполнения кода:
Decode error: Syntax error
Пример
Давайте закодируем массив в формат, который не поддерживается сериализатором:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\Serializer\Exception\NotEncodableValueException;
class ArticleController extends AbstractController
{
public function index(SerializerInterface $serializer): Response
{
$data = ['a', 'b', 'c'];
try {
$res = $serializer->encode($data, 'unknown_format');
} catch (NotEncodableValueException $e) {
$res = 'Encode error: ' . $e->getMessage();
}
return new Response($res);
}
}
?>
Результат выполнения кода:
Encode error: Serializer for "unknown_format" not found
Пример
Давайте раскодируем корректный JSON и выведем полученный массив:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Serializer\SerializerInterface;
class ArticleController extends AbstractController
{
public function index(SerializerInterface $serializer): Response
{
$json = '{"name": "abcde", "age": 25}';
$res = $serializer->decode($json, 'json');
return new Response($res['name']);
}
}
?>
Результат выполнения кода:
abcde
Смотрите также
-
исключение
UnprocessableEntityHttpException,
которое возвращает код 422 при неверных данных -
исключение
BadRequestHttpException,
которое сигнализирует о некорректном запросе -
исключение
InvalidArgumentException,
которое выбрасывается при неверных аргументах -
исключение
ValidationFailedException,
которое возникает при провале валидации данных