So erstellen Sie ein erstes Objekt mit Symfony-SerialisierungPhp

PHP-Programmierer chatten hier
Guest
 So erstellen Sie ein erstes Objekt mit Symfony-Serialisierung

Post by Guest »

Zum Beispiel habe ich die SimpleDto-Klasse

Code: Select all

class SimpleDto implements GetPhoneInterface
{
public string $name;

public int $value;
}
Und json

Code: Select all

{"name":"Jane"}
Wenn ich es serialisiere, erhalte ich ein ungültiges Objekt.

Code: Select all

$serializer = self::getContainer()->get(SerializerInterface::class);
$dto = $serializer->deserialize($json, $dtoClass);
$dto hat keine Anfangsvariable $value.
Wie kann ich sicherstellen, dass während der Deserialisierung eine Ausnahme auftritt, dass die Klasse nicht validierte Werte hat?< /p>
Wenn dies nicht mit einem Serialisierer gelöst werden kann, gibt es vielleicht eine Möglichkeit, dies mit einem Validator zu überprüfen?
Upd:
Ich habe es versucht Implementieren Sie es so, aber der Code verhält sich falsch. Darüber hinaus ist ObjectNormalizer eine letzte Klasse.
Vielleicht kennt jemand eine bessere Lösung?

Code: Select all

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);
}
}
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post