Как получить параметры конфигурации в шаблонах Symfony2 Twig

У меня есть шаблон веточки Symfony2. Я хочу вывести значение параметра конфигурации в шаблонах (номер версии). Поэтому я определил параметр config следующим образом:

parameters:
    app.version: 0.1.0

Я могу использовать этот параметр конфигурации в контроллерах, но я понятия не имею, как получить его в моем шаблоне Twig.

8 ответов


легко можно определить в файле config:

twig:
    globals:
        version: "0.1.0"

и получить доступ к нему в шаблоне с

{{ version }}

в противном случае это должен быть способ с расширением ветки, чтобы выставить ваши параметры.


вы можете использовать подстановку параметров в twig globals настройка:

параметр config:

parameters:
    app.version: 0.1.0

конфигурация Twig:

twig:
    globals:
        version: '%app.version%'

шаблон Twig:

{{ version }}

этот метод обеспечивает преимущество, позволяя вам использовать параметр ContainerAware классов, используя:

$container->getParameter('app.version');

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

# app/config/parameters.yml
parameters:
    ga_tracking: UA-xxxxx-x

# app/config/config.yml
twig:
    globals:
        ga_tracking: "%ga_tracking%"

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

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

параметр также доступен внутри контроллеров:

$this->container->getParameter('ga_tracking');

вы также можете определить службу как глобальную переменную Twig (На Symfony2.2+):

# app/config/config.yml
twig:
    # ...
    globals:
        user_management: "@acme_user.user_management"

http://symfony.com/doc/current/templating/global_variables.html

если глобальная переменная, которую вы хотите установить, сложнее-скажем, объект-тогда вы не сможете использовать вышеуказанный метод. Вместо этого вам нужно создать расширение Twig и возвращает глобальную переменную как одну из записей в методе getGlobals.


на более новых версиях Symfony2 (используя parameters.yml вместо parameters.ini), вы можете хранить объекты или массивы вместо пар ключ-значение, так что вы можете управлять глобалами таким образом:

config.yml (отредактировано только один раз):

# app/config/config.yml
twig:
  globals:
    project: %project%

параметры.в формате YML:

# app/config/parameters.yml
project:
  name:       myproject.com
  version:    1.1.42

и затем в файле веточки вы можете использовать {{ project.version }} или {{ project.name }}.

Примечание: я лично не люблю добавлять вещи в app, просто потому, что это переменная Symfony, и я не знаю, что будет храниться там в будущем.


приведенные выше ans верны и отлично работают. Я использовал по-другому.

конфиг.в формате YML

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: app.yml }
    - { resource: app_twig.yml }

app.в формате YML

parameters:
  app.version:           1.0.1

app_twig.в формате YML

twig:
  globals:
    version: %app.version%

внутри контроллера:

$application_version = $this->container->getParameter('app.version');
// Here using app.yml

внутри шаблона / файла веточки:

Project version {{ version }}!
{#  Here using app_twig.yml content.  #}
{#  Because in controller we used $application_version  #}

использовать контроллер вывод:


С расширением ветки, вы можете создать parameterпрутик функции:

{{ parameter('jira_host') }}

TwigExtension.на PHP:

class TwigExtension extends \Twig_Extension
{
    public $container;

    public function getFunctions()
    {
        return [
            new \Twig_SimpleFunction('parameter', function($name)
            {
                return $this->container->getParameter($name);
            })
        ];
    }


    /**
     * Returns the name of the extension.
     *
     * @return string The extension name
     */
    public function getName()
    {
        return 'iz';
    }
}

сервис.в формате YML:

  iz.twig.extension:
    class: IzBundle\Services\TwigExtension
    properties:
      container: "@service_container"
    tags:
      - { name: twig.extension }

вы можете просто привязать $this->getParameter('app.version') в контроллере для twig param, а затем визуализировать его.


в confing.в формате YML

# app/config/config.yml
twig:
  globals:
    version: '%app.version%'

в виде веточки

# twig view
{{ version }}