Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 6adf160

Browse filesBrowse files
committed
Added documentation about new requests formats configuration
1 parent 8903e23 commit 6adf160
Copy full SHA for 6adf160

File tree

Expand file treeCollapse file tree

1 file changed

+81
-55
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+81
-55
lines changed

‎cookbook/request/mime_type.rst

Copy file name to clipboardExpand all lines: cookbook/request/mime_type.rst
+81-55Lines changed: 81 additions & 55 deletions
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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.