Как внедрять переменные во все шаблоны (т.е. глобальные переменные)

Иногда вам может понадобиться, чтобы переменная быладоступна всем используемым вами шаблонам. Это возможно внутри вашего файла app/config/config.yml:

  • YAML
    1
    2
    3
    4
    5
    # app/config/config.yml
    twig:
        # ...
        globals:
            ga_tracking: UA-xxxxx-x
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    <!-- 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:twig="http://symfony.com/schema/dic/twig"
        xsi:schemaLocation="http://symfony.com/schema/dic/services
            http://symfony.com/schema/dic/services/services-1.0.xsd
            http://symfony.com/schema/dic/twig
            http://symfony.com/schema/dic/twig/twig-1.0.xsd">
    
        <twig:config>
            <!-- ... -->
            <twig:global key="ga_tracking">UA-xxxxx-x</twig:global>
        </twig:config>
    </container>
    
  • PHP
    1
    2
    3
    4
    5
    6
    7
    // app/config/config.php
    $container->loadFromExtension('twig', array(
         // ...
         'globals' => array(
             'ga_tracking' => 'UA-xxxxx-x',
         ),
    ));
    

Теперь, переменная ga_tracking доступна во всех шаблонах Twig:

1
<p>The google tracking code is: {{ ga_tracking }}</p>

Всё так просто!

Использование параметров сервис-контейнера

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

1
2
3
# app/config/parameters.yml
parameters:
    ga_tracking: UA-xxxxx-x
  • YAML
    1
    2
    3
    4
    # app/config/config.yml
    twig:
        globals:
            ga_tracking: '%ga_tracking%'
    
  • 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:twig="http://symfony.com/schema/dic/twig"
        xsi:schemaLocation="http://symfony.com/schema/dic/services
            http://symfony.com/schema/dic/services/services-1.0.xsd
            http://symfony.com/schema/dic/twig
            http://symfony.com/schema/dic/twig/twig-1.0.xsd">
    
        <twig:config>
            <twig:global key="ga_tracking">%ga_tracking%</twig:global>
        </twig:config>
    </container>
    
  • PHP
    1
    2
    3
    4
    5
    6
    // app/config/config.php
    $container->loadFromExtension('twig', array(
         'globals' => array(
             'ga_tracking' => '%ga_tracking%',
         ),
    ));
    

Та же переменная доступна точно так же, как и раньше.

Сервисы обращения

Вместо того, чтобы использовать статичные значение, вы также можете устанавливать значения в сервисе. Каждый раз, когда в шаблоне предоставляется доступ к глобальной переменной, сервис будет запрошен из сервис-контейнера и вы получите доступ к объекту.

Note

Сервис загружается не лениво. Другими словами, как только Twig загружен, ваш сервис запускается, даже если вы никогда не исползовали эту глобальную переменную.

Чтобы определить сервис как глобальную переменную Twig, припишите в начале строки @. Это должно казаться знакомым, так как такой же синтаксис используется в конфигурации сервиса.

  • YAML
    1
    2
    3
    4
    5
    6
    # app/config/config.yml
    twig:
        # ...
        globals:
            # the value is the service's id
            user_management: '@AppBundle\Service\UserManagement'
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    <!-- 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:twig="http://symfony.com/schema/dic/twig"
        xsi:schemaLocation="http://symfony.com/schema/dic/services
            http://symfony.com/schema/dic/services/services-1.0.xsd
            http://symfony.com/schema/dic/twig
            http://symfony.com/schema/dic/twig/twig-1.0.xsd">
    
        <twig:config>
            <!-- ... -->
            <twig:global key="user_management">@AppBundle\Service\UserManagement</twig:global>
        </twig:config>
    </container>
    
  • PHP
    1
    2
    3
    4
    5
    6
    7
    // app/config/config.php
    $container->loadFromExtension('twig', array(
         // ...
         'globals' => array(
             'user_management' => '@AppBundle\Service\UserManagement',
         ),
    ));
    

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