在symfony2中创建事件以呈现twig文件

时间:2014-11-21 06:48:02

标签: php symfony events twig

我是symfony2的新手,我正在寻找解决方案来创建一个渲染twig文件的事件。

假设我们有一个基本模板

<!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仅在AppKernel中注册“dev”和“test”环境。 这就是为什么我创建'版本'块而不是直接在基本树枝文件中调用ViewHelper。

但我不知道如何创建一个事件来首先渲染版本树枝模板,以便将数据传递给基础树枝。

1 个答案:

答案 0 :(得分:0)

我可能会改变您尝试这样做的方式,使用更多的Symfony功能并避免像Zend一样定义Zend。将Twig保持在尽可能小的状态是一个很好的经验法则,只需从模板接收的数据中呈现视图。

首先,在versionparameters_dev.yml文件中定义parameters_test.yml变量(在app/config中)。例如:

parameters:
    version: 32

version: ~中将其定义为parameters.yml

app/config/config.yml文件的所有Twig模板中提供此变量:

twig:
    globals:
        version: %version%

然后,在version块定义中,执行以下操作:

{% block version %}
    {% if version is not null %}
        <div id="version"><p>Version: {{ version }}</p></div>
    {% endif %}
{% endblock %}

希望它有所帮助!