我有一个如下所示的布局:
<html>
<body>
<!-- Omitted -->
<div class="content">
{% block body %}{% endblock %}
</div>
<script src="js/vendor.js"></script>
{% block javascripts %}
<!-- I want to be able to inject inline scripts from sub-templates here -->
{% endblock %}
</body>
</html>
然后我从FOSUserBundle覆盖了register_content.html.twig模板,在其中我试图将脚本注入“javascripts”块,如下所示:
{% block javascripts %}
<script>
// Some inline JS
</script>
{% endblock %}
我遇到的问题是内联脚本似乎是在“body”块的末尾注入而不是在“scripts”块中注入。
这是我得到的输出:
<!-- This should be below js/vendor.js scripts -->
<script>
// Some inline JS
</script>
</div>
</div>
<script src="js/vendor.js"></script>
我做错了什么?我的问题在于FOSUserBundle和它自己继承的模板(它仍然使用我的布局和我拥有的所有内容;不是它自己的布局)。我在这里很困惑。
P.S。我是Symfony / Twig的新手,所以请对我很轻松。
编辑:这些是我覆盖的FOSUserBundle布局和模板:
应用程序/资源/ FOSUserBundle /视图/ layout.html.twig:
{% extends 'AcmeWebBundle::layout.html.twig' %}
{% block title %}Acme Demo Application{% endblock %}
{% block body %}
{% block fos_user_content %}{% endblock %}
{% endblock %}
{% block javascripts %}
{{ parent() }}
{% endblock %}
应用程序/资源/ FOSUserBundle /视图/注册/ register.html.twig:
{% extends "FOSUserBundle::layout.html.twig" %}
{% block body %}
{% block fos_user_content %}
{% include "FOSUserBundle:Registration:register_content.html.twig" %}
{% endblock fos_user_content %}
{% endblock %}
{% block javascripts %}
{% parent() %}
{% endblock %}
应用程序/资源/ FOSUserBundle /视图/注册/ register_content.html.twig:
<div class="page-header">
<h2>Register</h2>
</div>
<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="fos_user_registration_register form-horizontal">
<!-- HTML Omitted -->
</form>
{% block javascripts %}
{% javascripts '@AcmeWebBundle/Resources/public/js/app.js' %}
<script>
// jQuery is undefined because it gets defined below the 'javascripts' block in the parent layout
console.dir(window.jQuery);
</script>
{% endjavascripts %}
{% endblock %}
答案 0 :(得分:1)
编辑后情况更加清晰。
您期望的行为仅适用于模板继承;它不会像include
一样使用app/Resources/FOSUserBundle/views/Registration/register.html.twig
。
要执行您想要的操作,请执行以下操作之一:
将来自javascript
app/Resources/FOSUserBundle/views/Registration/register_content.html.twig
javascript
app/Resources/FOSUserBundle/views/Registration/register.html.twig
块app/Resources/FOSUserBundle/views/Registration/register.html.twig
块中的内联JavaScript代码放入app/Resources/FOSUserBundle/views/Registration/register_content.html.twig
让模板register_content.html.twig
继承layout.html.twig
并根据需要覆盖其块(@Override
public Object instantiateItem(ViewGroup container, int position) {
Object value = super.instantiateItem(container, position);
if (position == 0) {
someFragment = (SomeFragment) value;
} else if (position == 1) {
anotherFragment = (AnotherFragment) value;
}
return value;
}
不会延伸{{1}},所以这没有多大意义)< / p>