Как встроить асинхронное содержание с помощью 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.