Чтобы сериализовать или десериализовать объект в 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