Как встроить асинхронное содержание с помощью hinclude.js

Контроллеры могут быть встроены асинхронно, используя библиотеку Java-скрипта hinclude.js. Так как встроенное содержание поступает с другой страницы (или, если на то пошло, контроллера), Symfony использует версию стандартной функции render(), чтобы сконфигурировать теги hinclude:

  • Twig
    1
    2
    {{ render_hinclude(controller('...')) }}
    {{ render_hinclude(url('...')) }}
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    <?php echo $view['actions']->render(
        new ControllerReference('...'),
        array('renderer' => 'hinclude')
    ) ?>
    
    <!-- Метод url() был представлен в Symfony 2.8. До версии 2.8, вам
         нужно было использовать generate() с UrlGeneratorInterface::ABSOLUTE_URL,
         переданным в качестве третьего аргумента. -->
    <?php echo $view['actions']->render(
        $view['router']->url('...'),
        array('renderer' => 'hinclude')
    ) ?>
    

Note

hinclude.js должен быть включён в вашу страницу, чтобы он работад.

Note

При использовании контроллера вместо URL, вы должны активировать конфигурацию Symfony fragments:

  • YAML
    1
    2
    3
    4
    # app/config/config.yml
    framework:
        # ...
        fragments: { path: /_fragment }
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    <!-- 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:fragment path="/_fragment" />
        </framework:config>
    </container>
    
  • PHP
    1
    2
    3
    4
    5
    // app/config/config.php
    $container->loadFromExtension('framework', array(
        // ...
        'fragments' => array('path' => '/_fragment'),
    ));
    

Содержание по умолчанию (во время загрузки или если Java-скрипт отключен) может быть установлено глобально в конфигурации вашего приложения:

  • YAML
    1
    2
    3
    4
    5
    # app/config/config.yml
    framework:
        # ...
        templating:
            hinclude_default_template: hinclude.html.twig
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    <!-- 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:templating hinclude-default-template="hinclude.html.twig" />
        </framework:config>
    </container>
    
  • PHP
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // app/config/config.php
    $container->loadFromExtension('framework', array(
        // ...
        'templating' => array(
            'hinclude_default_template' => array(
                'hinclude.html.twig',
            ),
        ),
    ));
    

Вы можете определять шаблоны по умолчанию для каждой функции render() (что переопределит любой определённый глобальный шаблон по умолчанию):

  • Twig
    1
    2
    3
    {{ render_hinclude(controller('...'),  {
        'default': 'default/content.html.twig'
    }) }}
    
  • PHP
    1
    2
    3
    4
    5
    6
    7
    <?php echo $view['actions']->render(
        new ControllerReference('...'),
        array(
            'renderer' => 'hinclude',
            'default'  => 'default/content.html.twig',
        )
    ) ?>
    

Или вы также можете указать строку для отображения в качестве содержания по умолчанию:

  • Twig
    1
    {{ render_hinclude(controller('...'), {'default': 'Loading...'}) }}
    
  • PHP
    1
    2
    3
    4
    5
    6
    7
    <?php echo $view['actions']->render(
        new ControllerReference('...'),
        array(
            'renderer' => 'hinclude',
            'default'  => 'Loading...',
        )
    ) ?>
    

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