У меня есть макет, который выглядит следующим образом:Append встроенных сценариев внутри блока макета Twig
<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>
Тогда у меня есть шаблон register_content.html.twig преодолен из FOSUserBundle и в нем я пытаюсь внедрить скрипт в «JavaScripts» блок, как так:
{% block javascripts %}
<script>
// Some inline JS
</script>
{% endblock %}
проблемы я имею рядный сценарий, кажется, чтобы получить впрыскивается в конце блока «тело», а не в блоке «сценарии».
Это выход я получаю:
<!-- 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, поэтому, пожалуйста, будьте спокойны.
EDIT: Это расположение FOSUserBundle и шаблоны Я перекрываться:
приложение/Ресурсы/FOSUserBundle/Views/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 %}
Шаблон с '{% block scripts%}' расширяет последний макет, который вы добавили, правильно? И последний макет расширяет первый, который вы показали? Посмотрите, что произойдет, если в макете FOSUserBundle вы определите пустой '{% block scripts%} {% endblock%}'. – Artamiel
Собственно, это была ошибка. Блок называется «javascripts» в обоих местах, я исправил свой первоначальный вопрос. Кроме того, удаление {{parent()}} из шаблона макета FOSUserBundle не имеет значения. –
Можете ли вы показать весь код того, как вы переопределяете шаблон register_content.html.twig из FOSUserBundle? –