Skip to content

Commit 6adf160

Browse files
committed
Added documentation about new requests formats configuration
1 parent 8903e23 commit 6adf160

File tree

1 file changed

+81
-55
lines changed

1 file changed

+81
-55
lines changed

cookbook/request/mime_type.rst

+81-55
Original file line numberDiff line numberDiff line change
@@ -15,81 +15,107 @@ object. Internally, Symfony contains a map of the most common formats (e.g.
1515
easily be added. This document will show how you can add the ``jsonp`` format
1616
and corresponding MIME type.
1717

18-
Create a ``kernel.request`` Listener
19-
-------------------------------------
18+
.. versionadded:: 2.5
19+
The possibility to configure request formats was introduced in Symfony 2.5.
2020

21-
The key to defining a new MIME type is to create a class that will "listen" to
22-
the ``kernel.request`` event dispatched by the Symfony kernel. The
23-
``kernel.request`` event is dispatched early in Symfony's request handling
24-
process and allows you to modify the request object.
25-
26-
Create the following class, replacing the path with a path to a bundle in your
27-
project::
28-
29-
// src/Acme/DemoBundle/RequestListener.php
30-
namespace Acme\DemoBundle;
31-
32-
use Symfony\Component\HttpKernel\HttpKernelInterface;
33-
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
34-
35-
class RequestListener
36-
{
37-
public function onKernelRequest(GetResponseEvent $event)
38-
{
39-
$event->getRequest()->setFormat('jsonp', 'application/javascript');
40-
}
41-
}
42-
43-
Registering your Listener
21+
Configure your New Format
4422
-------------------------
4523

46-
As with any other listener, you need to add it in one of your configuration
47-
files and register it as a listener by adding the ``kernel.event_listener`` tag:
24+
The FrameworkBundle registers a subscriber that will add formats to incomming requests.
25+
26+
All you have to do is to configure the ``jsonp`` format:
4827

4928
.. configuration-block::
5029

5130
.. code-block:: yaml
5231
5332
# app/config/config.yml
54-
services:
55-
acme.demobundle.listener.request:
56-
class: Acme\DemoBundle\RequestListener
57-
tags:
58-
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
33+
framework:
34+
request:
35+
formats:
36+
jsonp: 'application/javascript'
5937
6038
.. code-block:: xml
6139
6240
<!-- app/config/config.xml -->
63-
<?xml version="1.0" ?>
41+
<?xml version="1.0" encoding="UTF-8" ?>
42+
6443
<container xmlns="http://symfony.com/schema/dic/services"
6544
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
66-
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
67-
<services>
68-
<service id="acme.demobundle.listener.request"
69-
class="Acme\DemoBundle\RequestListener">
70-
<tag name="kernel.event_listener"
71-
event="kernel.request"
72-
method="onKernelRequest"
73-
/>
74-
</service>
75-
</services>
45+
xmlns:framework="http://symfony.com/schema/dic/symfony"
46+
xsi:schemaLocation="http://symfony.com/schema/dic/services
47+
http://symfony.com/schema/dic/services/services-1.0.xsd
48+
http://symfony.com/schema/dic/symfony
49+
http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"
50+
>
51+
<framework:config>
52+
<framework:request>
53+
<framework:format name="jsonp">
54+
<framework:mime-type>application/javascript</framework:mime-type>
55+
</framework:format>
56+
</framework:request>
57+
</framework:config>
7658
</container>
7759
7860
.. code-block:: php
7961
80-
# app/config/config.php
81-
$definition = new Definition('Acme\DemoBundle\RequestListener');
82-
$definition->addTag('kernel.event_listener', array(
83-
'event' => 'kernel.request',
84-
'method' => 'onKernelRequest',
62+
// app/config/config.php
63+
$container->loadFromExtension('framework', array(
64+
'request' => array(
65+
'formats' => array(
66+
'jsonp' => 'application/javascript',
67+
),
68+
),
8569
));
86-
$container->setDefinition('acme.demobundle.listener.request', $definition);
87-
88-
At this point, the ``acme.demobundle.listener.request`` service has been
89-
configured and will be notified when the Symfony kernel dispatches the
90-
``kernel.request`` event.
9170
9271
.. tip::
9372

94-
You can also register the listener in a configuration extension class (see
95-
:ref:`service-container-extension-configuration` for more information).
73+
You can also associate multiple mime types to a format, but please note that
74+
the preferred one must be the first as it will be used as the content type:
75+
76+
.. configuration-block::
77+
78+
.. code-block:: yaml
79+
80+
# app/config/config.yml
81+
framework:
82+
request:
83+
formats:
84+
csv: ['text/csv', 'text/plain']
85+
86+
.. code-block:: xml
87+
88+
<!-- app/config/config.xml -->
89+
<?xml version="1.0" encoding="UTF-8" ?>
90+
91+
<container xmlns="http://symfony.com/schema/dic/services"
92+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
93+
xmlns:framework="http://symfony.com/schema/dic/symfony"
94+
xsi:schemaLocation="http://symfony.com/schema/dic/services
95+
http://symfony.com/schema/dic/services/services-1.0.xsd
96+
http://symfony.com/schema/dic/symfony
97+
http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"
98+
>
99+
<framework:config>
100+
<framework:request>
101+
<framework:format name="csv">
102+
<framework:mime-type>text/csv</framework:mime-type>
103+
<framework:mime-type>text/plain</framework:mime-type>
104+
</framework:format>
105+
</framework:request>
106+
</framework:config>
107+
</container>
108+
109+
.. code-block:: php
110+
111+
// app/config/config.php
112+
$container->loadFromExtension('framework', array(
113+
'request' => array(
114+
'formats' => array(
115+
'jsonp' => array(
116+
'text/csv',
117+
'text/plain',
118+
),
119+
),
120+
),
121+
));

0 commit comments

Comments
 (0)