gisostallenberg/response-content-negotiation-bundle

A bundle that allows creating various Response types from a controller, based on content negotiation

Maintainers

👁 gisostallenberg

Package info

github.com/gisostallenberg/response-content-negotiation-bundle

pkg:composer/gisostallenberg/response-content-negotiation-bundle

Statistics

Installs: 15 957

Dependents: 1

Suggesters: 0

Stars: 0

Open Issues: 0

3.0.1 2026-03-11 09:53 UTC

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT e742ff6cf3da81c285b166c97069ce5532bd1e8e

  • Giso Stallenberg <gisostallenberg.woop@gmail.com>

README

👁 Latest Stable Version
👁 Latest Unstable Version
👁 Total Downloads
👁 License

Response Content Negotiation Bundle

A bundle that allows creating various Response types from a controller, based on content negotiation

Installation

composer require gisostallenberg/response-content-negotiation-bundle

Requirements

HTML

To render HTML the bundle requires TwigBundle.

JSON & XML

To output JSON or XML the bundle requires FOS Rest Bundle and JMS Serializer Bundle or Symfony Serializer

Usage

<?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']));
 }
}

HTML

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'].

JSON

This will respond with

{
 "my-data-label": "my data"
}

XML

This will respond with

<my-data-label>
 <entry>my data</entry>
<my-data-label>

Serialization

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']])