Я использую Webpack Encore в своем проекте Symfony 4, и при включении помощника Twig для JavaScript в моем base.html.twig:
{% block javascripts %}
{{ encore_entry_script_tags('app') }}
{% endblock %}
Однако JavaScript не загружается при включении точно такого же помощника Twig в один из моих шаблонов (index.html.twig), JavaScript загружается.
Итак, мой вопрос: почему вышеупомянутый помощник Twig работает в одном из моих шаблонов, но не в моем базовом шаблоне?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это не удается, потому что он находится внутри вашего блока 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 %}. Это просто будет проигнорировано.
То, что сказал пресел, верно: использование блока внутри шаблона, который расширяет другой шаблон, перезапишет код по умолчанию внутри этого указанного блока.
Однако есть другое решение, чем просто перемещение кода за пределы блока в базовом шаблоне, вызывающее функцию parent().
главная.ветвь
{% extends 'base.twig' %}
{% block foo %}
{{ parent() }}
Bar
{% endblock %}
база.ветка
{% block foo %}
Foo
{% endblock %}
выход
Foo
Bar
Вынужден не согласиться с тем, что это сложнее. Если у вас есть блок, предназначенный для javascript страницы, но в шаблоне есть только основной javascript, который вам нужен, использование parent() — отличный способ сохранить все на месте с той же базовой структурой. По моему опыту, это чрезвычайно полезно и, безусловно, приводит к более чистой разметке. Зачем вам 2 блока javascript, когда вы можете иметь один?
Не знал об этом. Может оказаться действительно полезным.
Полезно знать, хотя я нахожу его более «сложным» и подверженным ошибкам. Но все же, полезно знать. Бьюсь об заклад, может оказаться полезным в некоторых случаях.