Table of Contents
Questions & Feedback
Found a typo or an error?
Want to improve this document? Edit it.
Need support or have a technical question?
Post to the user mailing-list.
Master Symfony2 fundamentals
Symfony hosting done right
Discover the SensioLabs Support
Registrare un nuovo formato di richiesta e un nuovo tipo mime
Registrare un nuovo formato di richiesta e un nuovo tipo mime¶
Ogni Richiesta ha a un "formato" (come html, json), che viene usato
per determinare il tipo di contenuto che dovrà essere restituito nell Risposta.
Il formato della richiesta, accessibile tramite
getRequestFormat(),
viene infatti utilizzato per definire il tipo MIME dell'intestazione Content-Type
dell'oggetto Risposta. Symfony contiene una mappa dei formati più comuni (come
html, json) e del corrispettivo tipo MIME (come text/html,
application/json). È comunque possibile aggiungere nuovi formati-MIME.
In questo documento si vedrà come aggiungere un nuovo formato jsonp
e il corrispondente tipo MIME.
Creazione di un ascoltatore per il kernel.request¶
La chiave per definire un nuovo tipo MIME è creare una classe che rimarrà in ascolto
dell'evento kernel.request emesso dal kernel di Symfony. L'evento kernel.request
è emesso da Symfony nelle primissime fasi della gestione della richiesta
e permette di modificare l' oggetto richiesta.
Si crea una classe simile alla seguente, sostituendo i percorsi in modo che puntino a un bundle del proprio progetto:
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 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');
}
}
|
Registrazione dell'ascoltatore¶
Come per ogni ascoltatore, è necessario aggiungere anche questo nel file di
configurazione e registrarlo come tale aggiungendogli il tag kernel.event_listener:
- XML
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"> <services> <service id="acme.demobundle.listener.request" class="Acme\DemoBundle\RequestListener"> <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" /> </service> </services> </container>
- YAML
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 }
- PHP
1 2 3 4 5 6 7
# 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);
A questo punto, il servizio acme.demobundle.listener.request è stato configurato
e verrà notificato dell'avvenuta emissione, da parte del kernel Symfony,
dell'evento kernel.request.
Tip
È possibile registrare l'ascoltatore anche in una classe di estensione della configurazione (si veda Importare la configurazione attraverso estensioni del contenitore per ulteriori informazioni).





is a trademark of Fabien Potencier. All rights reserved.