Documentação do Symfony - versão 3.1
Renderizada do repositório symfony-docs-pt-BR no Github
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
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.
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');
}
}
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
:
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- app/config/config.xml -->
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<service id="acme.demobundle.listener.request" class="Acme\DemoBundle\RequestListener">
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" />
</service>
</container>
|
1 2 3 4 5 6 | # app/config/config.yml
services:
acme.demobundle.listener.request:
class: Acme\DemoBundle\RequestListener
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
|
1 2 3 4 | # app/config/config.php
$definition = new Definition('Acme\DemoBundle\RequestListener');
$definition->addTag('kernel.event_listener', array('event' => 'kernel.request', 'method' => 'onKernelRequest'));
$container->setDefinition('acme.demobundle.listener.request', $definition);
|
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).