Cómo retornar una respuesta XML o JSON con Symfony 2 y 3

XML

Para devolver una respuesta xml en un controlador Symfony, necesitamos usar el componente Response en nuestro controlador, luego simplemente cambiaremos los encabezados de la respuesta para enviar un formato específico (xml en este caso) en él.

<?php 

namespace ourcodeworld\mybundleBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class myClass extends Controller
{
  public function xmlresponseAction(){
      $xml = '<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">';
      $xml .= '<mynode><content>Hello</content></mynode>';

      $response = new Response($xml);
      $response->headers->set('Content-Type', 'xml');
        
      return $response;
  }
}

Puede usar la  función php simplexmlelement para crear su nodo xml de acuerdo con sus necesidades u obtener el contenido de una vista twig.

JSON

Con una versión de Symfony> 2.5 puedes usar el siguiente código para devolver una respuesta json en tu controlador, solo necesitas incluir la clase JsonResponse y devolverla como una respuesta normal.

namespace ourcodeworld\mybundleBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;

class myClass extends Controller
{
  public function jsonresponseAction(){
      $myresponse = array(
        'success' => true,
        'content' => array(
         'main_content' => 'A long string',
         'secondary_content' => 'another string'
        )
      );
        
      return new JsonResponse($myresponse);
  }
}

Si estás usando una versión anterior de Symfony, puedes usar el siguiente código en su lugar:

namespace ourcodeworld\mybundleBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class myClass extends Controller
{
  public function jsonresponseAction(){
      $myresponse = array(
        'success' => true,
        'content' => array(
         'main_content' => 'A long string',
         'secondary_content' => 'another string'
        )
      );

      $finalResponse = json_encode($myresponse);
        
      $response = new Response($finalResponse);
      $response->headers->set('Content-Type', 'application/json');
        
      return $response;
  }
}

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable