A bundle that allows creating various Response types from a controller, based on content negotiation
composer require gisostallenberg/response-content-negotiation-bundleTo render HTML the bundle requires TwigBundle.
To output JSON or XML the bundle requires FOS Rest Bundle and JMS Serializer Bundle or Symfony Serializer
<?php
namespace App\Controller;
use GisoStallenberg\Bundle\ResponseContentNegotiationBundle\Content\ResultData;
use GisoStallenberg\Bundle\ResponseContentNegotiationBundle\Content\ResultInterface;
use GisoStallenberg\Bundle\ResponseContentNegotiationBundle\Content\ResultServiceLocator;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class AcmeController
{
/**
* @Route("/my-page", methods={"GET"})
*/
public function resultAction(
ResultServiceLocator $resultServiceLocator,
Request $request
): ResultInterface {
return $resultServiceLocator->getResult($request, new ResultData('acme', ['my-data-label' => 'my data']));
}
}This will render acme.html.twig with the Twig context ['my-data-label' => 'my data'].
If you want to render a specific template, you can add this as template argument to the ResultData.
For example:
new ResultData('acme', ['my-data-label' => 'my data'], ['template' => '@AcmeBundle/templates/acme.twig.html'])This will render @AcmeBundle/templates/acme.twig.html with the Twig context ['my-data-label' => 'my data'].
This will respond with
{
"my-data-label": "my data"
}This will respond with
<my-data-label>
<entry>my data</entry>
<my-data-label>To use serialization groups in the serialization process, you can add the groups option parameter.
For example:
new ResultData('acme', ['my-data-label' => 'my data'], ['groups' => ['profile', 'list']])