Symfony에서 XML 직렬화/역직렬화

시리얼라이저란 무엇입니까?



직렬 변환기는 개체를 XML로 변환(직렬화)하거나 반대로 XML을 개체로 변환(역직렬화)하기 위한 것입니다.

이것은 JSON 및 기타 형식에도 수행할 수 있으므로 Symfony의 documentation을 살펴보십시오. JML 과 같은 타사 직렬 변환기가 있지만 지금은 Symfony의 기본 직렬 변환기를 사용하겠습니다.

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


}


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


결과



우리는 객체 Person을 생성하고 이를 XML로 직렬화하여 다음과 같은 다이와 덤프를 생성했습니다.


4. 다른 메서드 deserializeObject()를 추가하여 XML을 개체로 역직렬화합니다.




/**
     * @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);
    }


결과



이번에는 Person 및 일부 속성을 사용하여 xml을 변환했으며 결과적으로 다음과 같이 다이 및 덤프가 발생했습니다.


다 여러분~

좋은 웹페이지 즐겨찾기