Я новичок в symfony2 и ищу решение для создания события, которое отображает файл ветки.
Предположим, у нас есть базовый шаблон
<!DOCTYPE html>
<html>
<head>
{% block meta %}{% endblock %}
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}{% endblock %}
</head>
<body data-cachetime="{{ cacheTimeStamp() }}">
{% block header %}{% endblock %}
<div id="content">
<div class="container">
{% block content %}{% endblock %}
</div>
</div>
{% block footer %}{% endblock %}
{% block version %}{% endblock %}
{% block javascripts %}{% endblock %}
{% block trackers %}{% endblock %}
</body>
</html>
Как видите, у меня есть блок «версия». Я создал VersionBundle, который читает версию из файла. Шаблон веточки версии
{% block version %}
<div id="version"><p>Version: {{ versionString() }}</p></div>
{% endblock %}
вызывает «ViewHelper» (я пришел из Zend ;-)), который вызывает функцию из VersionBundle. Но теперь самое сложное:
VerionBundle зарегистрирован только для среды ‘dev’ и ‘test’ в AppKernel.
Вот почему я создаю блок ‘version’ вместо вызова ViewHelper непосредственно в файле базовой ветки.
Но я не знаю, как создать событие, чтобы сначала отобразить шаблон ветки версии, чтобы данные передавались в базовую веточку.
Возможно, я бы изменил способ, которым вы пытаетесь это сделать, используя больше возможностей Symfony и избегая определения Zend как «помощников». Хорошее эмпирическое правило — сохранять Twig настолько минимальным, насколько это возможно, просто отображая данные, полученные шаблонами.
Сначала определите version
переменная в parameters_dev.yml
а также parameters_test.yml
файлы (в app/config
). Пример:
parameters:
version: 32
Определите это как version: ~
в parameters.yml
,
Сделайте эту переменную доступной во всех шаблонах Twig в app/config/config.yml
файл:
twig:
globals:
version: %version%
Тогда в вашем version
определение блока, сделайте следующее:
{% block version %}
{% if version is not null %}
<div id="version"><p>Version: {{ version }}</p></div>
{% endif %}
{% endblock %}
Надеюсь, поможет!
Других решений пока нет …