Documentação do Symfony2
Renderizada do repositório symfony-docs-pt-BR no Github

Como registrar um novo Formato de Requisição e de Mime Type

Todo Request possui um “formato” (e.g. html, json), que é usado para determinar o tipo de conteúdo a ser retornado pelo Response. Na verdade, o formato de requisição, acessível pelo método :method:`Symfony\\Component\\HttpFoundation\\Request::getRequestFormat`, é usado para definir o MIME type do cabeçalho Content-Type no objeto Response. Internamente, Symfony contém um mapa dos formatos mais comuns (e.g. html, json) e seus MIME types associados (e.g. text/html, application/json). Naturalmente, formatos adicionais de MIME type de entrada podem ser facilmente adicionados. Este documento irá mostrar como você pode adicionar o formato jsonp e seu MIME type correspondente.

Criando um kernel.request Listener

A chave para definir um novo MIME type é criar uma classe que irá “ouvir” o evento kernel.request enviado pelo kernel do Symfony. O evento kernel.request é enviado no início no processo de manipulação da requisição Symfony e permite que você modifique o objeto da requisição.

Crie a seguinte classe, substituindo o caminho com um caminho para um pacote em seu projeto:

// src/Acme/DemoBundle/RequestListener.php
namespace Acme\DemoBundle;

use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;

class RequestListener
{
    public function onKernelRequest(GetResponseEvent $event)
    {
        $event->getRequest()->setFormat('jsonp', 'application/javascript');
    }
}

Registrando seu Listener

Como para qualquer outro listener, você precisa adicioná-lo em um arquivo de configuração e registrá-lo como um listerner adicionando a tag kernel.event_listener:

Neste ponto, o serviço acme.demobundle.listener.request foi configurado e será notificado quando o Symfony kernel enviar um evento kernel.request.

Tip

Você também pode registrar o ouvinte em uma classe de extensão de configuração (see Importando Configuração através de Extensões do Container para mais informações).