Как зарегистрировать новый формат запроса и mime-тип

Как зарегистрировать новый формат запроса и mime-тип

Каждый Request имеет "формат" (например, html, json), который используется для определения того, какой тип содержания возвращать в Response. На самом деле, формат запроса, доступный с помощью getRequestFormat(), используется для установки MIME-типа заголовка Content-Type в объекте Response. Внутренне, Symfony содержит карту наиболее распространённых форматов (например, html, json) и их ассоциированных MIME-типов (например, text/html, application/json). Конечное же, дополнительные записи форматов MIME-типов можно легко добавлять. Этот документ покажет вам, как вы можете добавить формат jsonp и соответствующий MIME-тип.

Сконфигурируйте ваш новый формат

Пакет FrameworkBundle регистрирует абонента, который будет добавлять форматы во входящие запросы.

Вот всё, что вам нужно сделать, чтобы сконфигурировать формат jsonp:

  • YAML
    1
    2
    3
    4
    5
    # app/config/config.yml
    framework:
        request:
            formats:
                jsonp: 'application/javascript'
    
  • XML
     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>
    
  • PHP
    1
    2
    3
    4
    5
    6
    7
    8
    // app/config/config.php
    $container->loadFromExtension('framework', array(
        'request' => array(
            'formats' => array(
                'jsonp' => 'application/javascript',
            ),
        ),
    ));
    

Tip

Вы также можете объединить множество mime-типов с форматом, но пожалуйста имейте в виду, что предпочитаемый тип должен быть первым, так как он будет использован как тип содержания:

  • YAML
    1
    2
    3
    4
    5
    # app/config/config.yml
    framework:
        request:
            formats:
                csv: ['text/csv', 'text/plain']
    
  • XML
     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>
    
  • PHP
     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',
                ),
            ),
        ),
    ));
    

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.