【发布时间】:2014-07-07 07:54:14
【问题描述】:
存在许多名为 list.html.twig 的模板,最好将所有这些不同的列表模板包含在单个索引模板中。
每个列表模板采用以下形式:
{% extends 'XXX::layout.html.twig' %}
{% block body %}
Stuff handle data in different ways per template.
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script type="text/javascript">
doSomethingMaybeCrudJSCode('table ZZZ');
</script>
{% endblock %}
索引模板如下:
{% extends 'XXX::layout.html.twig' %}
{% block title %}Contacts{% endblock %}
{% block body %}
{% include 'XXX:AAA:list.html.twig' with { 'data': dataA } %}
{% include 'XXX:WWW:list.html.twig' with { 'data': dataW } %}
{% include 'XXX:YYY:list.html.twig' with { 'data': dataY } %}
{% include 'XXX:ZZZ:list.html.twig' with { 'data': dataZ } %}
{% endblock %}
列表模板也可以通过 url 直接访问。
返回如下错误:
Calling "parent" on a template that does not extend nor "use" another template is forbidden in XXX:AAA:list.html.twig at line 14
我已经看过使用 use 了,但还是不能让它工作,它应该如何与上面的例子一起使用?还是我需要创建一个新模板,每个列表都包括索引(一个用于 js,一个用于 html)?不太可取,如果是这样,我可以遵循一个命名约定,以便我知道哪个模板仅用于包含?我的偏好是管理更少的模板
基础模板如下:
<!-- app/Resources/views/base.html.twig -->
<!DOCTYPE html>
<html>
<head>
</head>
<body>
{% block body %}{% endblock %}
{% block javascripts %}
<script type="text/javascript" src="{{ asset('js/jquery-1.11.1.js') }}"></script>
{% endblock %}
</body>
</html>
布局模板:
{# src/XX/XBundle/Resources/views/layout.html.twig #}
{% extends '::base.html.twig' %}
更新:问题现在包括基本模板及其扩展方式。
【问题讨论】: