How to return a xml or json response with symfony 2 & 3

XML

To return a xml response in a symfony controller, we need to use the Response component in our controller, then we will just change the headers of the response to send a specific format (xml in this case) on it.

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

You can use simplexmlelement php function to create you xml node according to your needs or get the content of a twig view.

JSON

With a version of symfony > 2.5 you can use the following code to return a json response in your controller, you only need to include the JsonResponse class and return it as a normal response.

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

If you're using a lower version of symfony, you can use the following code instead :

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

Have fun !

Become a more social person