Например, у меня есть класс SimpleDto
class SimpleDto implements GetPhoneInterface
{
public string $name;
public int $value;
}
И JSON
{"name":"Jane"}
Когда я сериализую его, я получаю недействительный объект.
$serializer = self::getContainer()->get(SerializerInterface::class);
$dto = $serializer->deserialize($json, $dtoClass);
$dto не имеет начальной переменной $value.
Как убедиться, что во время десериализации возникнет исключение о том, что класс имеет непроверенные значения?< /p>
Если это невозможно решить с помощью сериализатора, возможно, есть какой-нибудь способ проверить с помощью валидатора?
Upd:
Я пытался реализуйте это так, но код ведет себя неправильно. Кроме того, ObjectNormalizer — это финальный класс.
Может быть, кто-нибудь знает решение получше?
class InitialObjectNormalizer extends ObjectNormalizer
{
// circle check
private array $visitedObjects = [];
private array $errors = [];
public function denormalize(mixed $data, string $type, ?string $format = null, array $context = [])
{
$data = parent::denormalize($data, $type, $format, $context);
$this->handleObject($data);
if (!empty($this->errors)) {
throw new PartialDenormalizationException(null, $this->errors);
}
return $data;
}
public function handleObject($obj): void
{
if (in_array($obj, $this->visitedObjects, true)) {
return;
}
$this->visitedObjects[] = $obj;
$attributes = new ReflectionObject($obj);
foreach ($attributes->getProperties() as $attribute) {
if (!$attribute->isInitialized($obj)) {
$this->errors[] = new NotNormalizableValueException('Attribute ' . $attribute->getName() . ' not initial',);
} else {
$value = $attribute->getValue($obj);
if (is_array($value) || is_object($value)) {
$this->handleObject($value);
}
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... ialization
Как создать исходный объект с сериализацией Symfony ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1711844014
Anonymous
Например, у меня есть класс SimpleDto
class SimpleDto implements GetPhoneInterface
{
public string $name;
public int $value;
}
И JSON
{"name":"Jane"}
Когда я сериализую его, я получаю недействительный объект.
$serializer = self::getContainer()->get(SerializerInterface::class);
$dto = $serializer->deserialize($json, $dtoClass);
$dto не имеет начальной переменной $value.
Как убедиться, что во время десериализации возникнет исключение о том, что класс имеет непроверенные значения?< /p>
Если это невозможно решить с помощью сериализатора, возможно, есть какой-нибудь способ проверить с помощью валидатора?
Upd:
Я пытался реализуйте это так, но код ведет себя неправильно. Кроме того, ObjectNormalizer — это финальный класс.
Может быть, кто-нибудь знает решение получше?
class InitialObjectNormalizer extends ObjectNormalizer
{
// circle check
private array $visitedObjects = [];
private array $errors = [];
public function denormalize(mixed $data, string $type, ?string $format = null, array $context = [])
{
$data = parent::denormalize($data, $type, $format, $context);
$this->handleObject($data);
if (!empty($this->errors)) {
throw new PartialDenormalizationException(null, $this->errors);
}
return $data;
}
public function handleObject($obj): void
{
if (in_array($obj, $this->visitedObjects, true)) {
return;
}
$this->visitedObjects[] = $obj;
$attributes = new ReflectionObject($obj);
foreach ($attributes->getProperties() as $attribute) {
if (!$attribute->isInitialized($obj)) {
$this->errors[] = new NotNormalizableValueException('Attribute ' . $attribute->getName() . ' not initial',);
} else {
$value = $attribute->getValue($obj);
if (is_array($value) || is_object($value)) {
$this->handleObject($value);
}
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78188534/how-to-create-initial-object-with-symfony-serialization[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия