Метод supportsDenormalization
Метод supportsDenormalization класса Serializer
проверяет, способен ли конкретный денормализатор
преобразовать переданные данные в объект заданного типа.
Первым параметром передаётся массив данных,
вторым - имя класса, в который нужно преобразовать данные,
третьим - формат (например, 'json'),
четвёртым - массив контекста.
Метод возвращает true, если денормализация поддерживается,
и false в противном случае.
Синтаксис
<?php
public function supportsDenormalization(
mixed $data,
string $type,
?string $format = null,
array $context = []
): bool
?>
Пример
Давайте создадим собственный денормализатор и проверим, поддерживает ли он денормализацию:
<?php
namespace AppSerializer;
use AppEntityArticle;
use SymfonyComponentSerializerContextAwareDenormalizerInterface;
use SymfonyComponentSerializerContextAwareNormalizerInterface;
class ArticleDenormalizer implements DenormalizerInterface
{
public function denormalize(
mixed $data,
string $type,
?string $format = null,
array $context = []
): mixed {
$article = new Article();
$article->setTitle($data['title']);
$article->setText($data['text']);
return $article;
}
public function supportsDenormalization(
mixed $data,
string $type,
?string $format = null,
array $context = []
): bool {
return $type === Article::class;
}
}
?>
Пример
Давайте проверим работу метода supportsDenormalization
на данных для класса Article:
<?php
namespace AppController;
use AppEntityArticle;
use AppSerializerArticleDenormalizer;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_check')]
public function check(): Response
{
$data = [
'title' => 'abcde',
'text' => 'article',
];
$denormalizer = new ArticleDenormalizer();
$res = $denormalizer->supportsDenormalization(
$data,
Article::class,
'json'
);
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
true
Пример
Давайте проверим метод для типа, который денормализатор не поддерживает:
<?php
namespace AppController;
use AppSerializerArticleDenormalizer;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/other', name: 'article_other')]
public function other(): Response
{
$data = [
'title' => 'abcde',
'text' => 'article',
];
$denormalizer = new ArticleDenormalizer();
$res = $denormalizer->supportsDenormalization(
$data,
AppEntityUser::class,
'json'
);
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
false
Смотрите также
-
класс
Serializer,
который выполняет сериализацию и денормализацию данных -
метод
denormalize,
который преобразует массив данных в объект -
метод
supportsNormalization,
который проверяет поддержку нормализации данных -
метод
normalize,
который преобразует объект в массив данных