Как получить параметры конфигурации в шаблонах Symfony2 Twig
У меня есть шаблон ветки Symfony2. Я хочу вывести значение параметра конфигурации в шаблонах (номер версии). Поэтому я определил параметр конфигурации следующим образом:
parameters:
app.version: 0.1.0
Я могу использовать этот параметр конфигурации в контроллерах, но я понятия не имею, как получить его в моем шаблоне Twig.
8 ответов:
легко можно определить в файле config:
twig: globals: version: "0.1.0"и получить доступ к нему в шаблоне с
{{ version }}в противном случае это должен быть способ с расширением ветки, чтобы выставить свои параметры.
вы можете использовать подстановку параметров в прутик глобалс настройка:
параметр config:
parameters: app.version: 0.1.0Twig config:
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 доступно во всех шаблонах веточек:
<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 верны и отлично работают. Я использовал по-другому.
config.в формате YML
imports: - { resource: parameters.yml } - { resource: security.yml } - { resource: app.yml } - { resource: app_twig.yml }приложение.в формате YML
parameters: app.version: 1.0.1app_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 }}
Comments