If your data is already serialized:
a) send a JSON response
public function someAction() { $response = new Response(); $response->setContent(file_get_contents('path/to/file')); $response->headers->set('Content-Type', 'application/json'); return $response; }
b) send JSONP response (with callback)
public function someAction() { $response = new Response(); $response->setContent('/**/FUNCTION_CALLBACK_NAME(' . file_get_contents('path/to/file') . ');'); $response->headers->set('Content-Type', 'text/javascript'); return $response; }
If your data needs to be serialized:
c) send a JSON response
public function someAction() { $response = new JsonResponse(); $response->setData([some array]); return $response; }
d) send JSONP response (with callback)
public function someAction() { $response = new JsonResponse(); $response->setData([some array]); $response->setCallback('FUNCTION_CALLBACK_NAME'); return $response; }
e) use groups in symfony 3.xx
Creating groups inside your objects
<?php namespace Mindlahus; use Symfony\Component\Serializer\Annotation\Groups; class SomeSuperClassName { public $foo; public $date; public function getBar() // is* methods are also supported { return $this->bar; }
Normalize a Doctrine object inside your application logic
<?php use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory; // For annotations use Doctrine\Common\Annotations\AnnotationReader; use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader; use Symfony\Component\Serializer\Serializer; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; use Symfony\Component\Serializer\Encoder\JsonEncoder; ... $repository = $this->getDoctrine()->getRepository('Mindlahus:SomeSuperClassName'); $SomeSuperObject = $repository->findOneById($id); $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())); $encoder = new JsonEncoder(); $normalizer = new ObjectNormalizer($classMetadataFactory); $callback = function ($dateTime) { return $dateTime instanceof \DateTime ? $dateTime->format('md-Y') : ''; }; $normalizer->setCallbacks(array('date' => $callback)); $serializer = new Serializer(array($normalizer), array($encoder)); $data = $serializer->normalize($SomeSuperObject, null, array('groups' => array('group1'))); $response = new Response(); $response->setContent($serializer->serialize($data, 'json')); $response->headers->set('Content-Type', 'application/json'); return $response;
Avram Cosmin Jun 29 '15 at 14:55 2015-06-29 14:55
source share