Webpack Encore无法在基本模板中加载JavaScript

时间:2019-05-09 20:43:04

标签: javascript symfony webpack twig

我在Symfony 4项目中使用了Webpack Encore,并且在我的base.html.twig中包含了JavaScript的Twig帮助器时:

{% block javascripts %}
    {{ encore_entry_script_tags('app') }}
{% endblock %}

JavaScript无法加载,但是,当在我的一个模板(index.html.twig)中包含完全相同的Twig帮助器时,JavaScript就会加载。

所以我的问题是,为什么上面的Twig帮助程序可以在我的模板之一中工作,而不在我的基本模板中工作?

2 个答案:

答案 0 :(得分:2)

失败,因为它在您的javascript块内。

您的模板扩展了base.html.twig,因此无论您在任何模板的javascript块中放置的内容如何,​​都将在javascript块之内。

但是如果您在base.html.twig中执行相同的操作,它将被忽略。

只需将{{ encore_entry_script_tags('app') }}移出您的JavaScript块即可。

base.html.twig

{{ encore_entry_script_tags('app') }}
{% block javascripts %}
    {# nothing here, your templates will overwrite it when  you extends base.html.twig #}
{% endblock %}

请记住:如果它在您的布局内,即base.html.twig,则不要在{% block %}标记内放置任何内容。它将被忽略。

答案 1 :(得分:2)

preciel所说的是正确的,在模板内使用扩展另一个模板的块将覆盖该块内的默认代码。

但是,除了将代码移至基本模板中的块之外,还有另一种解决方案,那就是调用parent()函数

main.twig

{% extends 'base.twig' %}
{% block foo %}
    {{ parent() }}
    Bar
{% endblock %}

base.twig

{% block foo  %}
    Foo
{% endblock %}

输出

  

Foo
  吧

demo