Как получить параметры конфигурации в шаблонах 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 }}