Symfony - как использовать Normalizer

Чтобы сериализовать или десериализовать объект в JSON или XML, в симфони (начиная с версии 2.3) уже встроен JMSSerializerBundle, однако, изначально включен только Serializer, но не включен Normalizer. Таким образом из JSON или XML создать объект можно, а превратить объект в JSON или XML нельзя, так давайте разберемся как включить эту возможность.

Для включения нормализации, всего лишь нужно в файл app/config/config.yml добавить:

services:
   get_set_method_normalizer:
      class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
      tags:
         - { name: serializer.normalizer }

все, теперь можете делать так:

<?php

namespace Intranet\OrgunitBundle\Controller;

 

use Intranet\OrgunitBundle\Entity\Orgunit;

use Symfony\Component\HttpFoundation\JsonResponse;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

 

class DefaultController extends Controller

{

    /**

     * Поиск сущности (по указанным полям)

     */

    public function searchAction()

    {

        $array = $this->get('request')->query->all();

 

        $entity = $this->getDoctrine()

            ->getRepository('IntranetOrgunitBundle:Orgunit')

            ->findOneBy($array);
 

        /** @var \DateTime $DateTime */

 

        $DateTime = $entity->getDateStart();

        $entity->setDateStart( $DateTime->format('d.m.Y') );

 

        $serializer = $this->get('serializer');

        $array = $serializer->normalize($entity);

        //$json = $serializer->serialize($entity, 'json');

 

        return new JsonResponse( $array );

    }

}

Удачи, господа.

p.s. 1) сериализовать в json с json-параметрами можно так:

$serializer->serialize($object, JsonEncoder::FORMAT, [
    JsonEncode::OPTIONS => JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_INVALID_UTF8_SUBSTITUTE | JSON_THROW_ON_ERROR,
])

p.s. 2) форматнуть xml в array можно так:

$array = json_decode(json_encode((array) simplexml_load_string($xml)), true);

детально разобрать xml можно так, а вот форматнуть array в xml удобнее всего либой Array2XML


19.03.2014 09:06