У меня есть шаблон Symfony2 Twig. Я хочу вывести значение параметра конфигурации в этом шаблоне ветки (номер версии). Поэтому я определил конфигурационный параметр следующим образом:
parameters:
app.version: 0.1.0
Я могу использовать этот параметр конфигурации в контроллерах, но я не знаю, как получить его в моем шаблоне Twig.
Легко, вы можете определить в своем файле конфигурации:
twig:
globals:
version: "0.1.0"
И получите его в своем шаблоне с помощью
{{ version }}
В противном случае это может быть путь с расширением Twig для отображения ваших параметров.
Вы можете использовать подстановку параметров в разделе twig globals конфигурации:
Конфигурация параметров:
parameters:
app.version: 0.1.0
Twig 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 доступна во всех шаблонах 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%
parameters.yml:
# app/config/parameters.yml
project:
name: myproject.com
version: 1.1.42
И затем в файле twig вы можете использовать {{ project.version }}
или {{ project.name }}
.
Примечание. Мне лично не нравится добавлять вещи к app
, просто потому, что это переменная Symfony, и я не знаю, что будет там храниться в будущем.
Вышеуказанные ans являются правильными и работают нормально. Я использовал по-другому.
config.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
Внутри файла шаблона /twig:
Project version {{ version }}!
{# Here using app_twig.yml content. #}
{# Because in controller we used $application_version #}
Контроллер:
public function indexAction() {
$application_version = $this->container->getParameter('app.version');
return array('app_version' => $application_version);
}
файл шаблона /twig:
Project version {{ app_version }}
Я упомянул разные, чтобы лучше понять.
С расширением Twig вы можете создать функцию parameter
Twig:
{{ 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';
}
}
service.yml:
iz.twig.extension:
class: IzBundle\Services\TwigExtension
properties:
container: "@service_container"
tags:
- { name: twig.extension }
Вы можете просто привязать $this->getParameter('app.version')
в контроллере к параметру twig и затем визуализировать его.
В confing.yml
# app/config/config.yml
twig:
globals:
container: '@service_container'
В представлении Twig
# twig view
{{ container.parameter('app.version')) }}