シンボリックでシリアル化/逆シリアル化


シリアライザーとは


シリアライザーは、オブジェクトをXMLに変換したり、他の方法でXMLを変換したり、XMLをオブジェクトに変換するものです.
これは、JSONや他の形式にも行うことができます.documentationのようなサードパーティ製のシリアル化装置がありますが、今はsymfonyのデフォルトシリアライザーで動作します.

JML symfonyのデフォルトシリアライザーの使い方


1 .シリアライザーを作曲家でインストールする


composer require symfony/serializer

2 .モデルの作成(デモの理由)


<?php

namespace App\Model;

class Person
{
    private $age;
    private $name;
    private $sportsperson;
    private $createdAt;

    // Getters

    /**
     * @return mixed
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * @return mixed
     */
    public function getAge()
    {
        return $this->age;
    }

    /**
     * @return mixed
     */
    public function getCreatedAt()
    {
        return $this->createdAt;
    }

    // Issers

    public function isSportsperson()
    {
        return $this->sportsperson;
    }

    /**
     * @param mixed $name
     */
    public function setName($name): void
    {
        $this->name = $name;
    }

    /**
     * @param mixed $age
     */
    public function setAge($age): void
    {
        $this->age = $age;
    }

    /**
     * @param mixed $sportsperson
     */
    public function setSportsperson($sportsperson): void
    {
        $this->sportsperson = $sportsperson;
    }

    /**
     * @param mixed $createdAt
     */
    public function setCreatedAt($createdAt): void
    {
        $this->createdAt = $createdAt;
    }


}

SerializeObject ()というメソッドを使用してSerializerControllerを作成する


<?php

namespace App\Controller;

use App\Model\Person;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;

class SerializerController
{

    protected $encoder;
    protected $normalizer;
    protected $serializer;
    protected $data;

    /**
     * @Route("/serialize-object", name="Serialize Object")
     */
    public function serializeObject()
    {
        $this->encoder      = [new XmlEncoder()];
        $this->normalizer   = [new ObjectNormalizer()];
        $this->serializer   = new Serializer($this->normalizer, $this->encoder);

        $person = new Person();
        $person->setName('foo');
        $person->setAge(99);
        $person->setSportsperson(false);

        $xmlContent = $this->serializer->serialize($person, 'xml');

        dd($xmlContent);
    }
}

結果


オブジェクトを作成し、XMLにシリアル化して、次のようにdieとdumpを実行します.

4 .他のメソッドDeserializeObject ()をオブジェクトにdesializeオブジェクトに追加する


/**
     * @Route("/deserialize-object", name="Deserialize Object")
     */
    public function deserializeObject()
    {
        $this->encoder      = [new XmlEncoder()];
        $this->normalizer   = [new ObjectNormalizer()];
        $this->serializer   = new Serializer($this->normalizer, $this->encoder);

        $this->data =   '<?xml version="1.0" encoding="UTF-8"?>
                         <Person>
                             <name>John Doe</name>
                             <age>88</age>
                             <sportsperson>true</sportsperson>
                         </Person>';

        $personObject = $this->serializer->deserialize($this->data, Person::class, 'xml');

        dd($personObject);
    }

結果


今回はXMLを人といくつかのプロパティで変換した結果、次のようにdieとdumpになりました.

すべての人々thats