Как создать исходный объект с сериализацией SymfonyPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как создать исходный объект с сериализацией Symfony

Сообщение 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);
}
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/781 ... ialization
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»