如何注册一个新的Request Type和Mime Type

3.4 版本
维护中的版本

Request 有一个 "format" (如 html, json), 用于决定在 Response 对象中返回何种类型的内容。实际上,请求格式(request format)可透过 getRequestFormat() 来访问,它用于设置 Response 对象里面 Content-Type 头的MIME type。在内部,Symfony内含全部常见格式 (如 html, json) 以及它们所关联的MIME types (如 text/html, application/json) 之间的映射。当然,附加的 format-MIME type 入口(entries),也可以轻松添加。 本文将展示如何添加 jsonp 格式连同其对应的MIME type。

配置你的新Format 

FrameworkBundle注册了一个subscriber,可以对到来的请求添加格式。

你要做的就只是配置 jsonp 格式:

1
2
3
4
5
# app/config/config.yml
framework:
    request:
        formats:
            jsonp: 'application/javascript'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- app/config/config.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
 
<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:framework="http://symfony.com/schema/dic/symfony"
    xsi:schemaLocation="http://symfony.com/schema/dic/services
        http://symfony.com/schema/dic/services/services-1.0.xsd
        http://symfony.com/schema/dic/symfony
        http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"
>
    <framework:config>
        <framework:request>
            <framework:format name="jsonp">
                <framework:mime-type>application/javascript</framework:mime-type>
            </framework:format>
        </framework:request>
    </framework:config>
</container>
1
2
3
4
5
6
7
8
// app/config/config.php
$container->loadFromExtension('framework', array(
    'request' => array(
        'formats' => array(
            'jsonp' => 'application/javascript',
        ),
    ),
));

你也可以关联多个mime type到一种格式上,但请注意首选的那个必须排在第一位,因为它将被用作content type:

1
2
3
4
5
# app/config/config.yml
framework:
    request:
        formats:
            csv: ['text/csv', 'text/plain']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!-- app/config/config.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
 
<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:framework="http://symfony.com/schema/dic/symfony"
    xsi:schemaLocation="http://symfony.com/schema/dic/services
        http://symfony.com/schema/dic/services/services-1.0.xsd
        http://symfony.com/schema/dic/symfony
        http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"
>
    <framework:config>
        <framework:request>
            <framework:format name="csv">
                <framework:mime-type>text/csv</framework:mime-type>
                <framework:mime-type>text/plain</framework:mime-type>
            </framework:format>
        </framework:request>
    </framework:config>
</container>
1
2
3
4
5
6
7
8
9
10
11
// app/config/config.php
$container->loadFromExtension('framework', array(
    'request' => array(
        'formats' => array(
            'jsonp' => array(
                'text/csv',
                'text/plain',
            ),
        ),
    ),
));

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)