2015-06-19 2 views
0

У меня есть макет, который выглядит следующим образом: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 %} 
+0

Шаблон с '{% block scripts%}' расширяет последний макет, который вы добавили, правильно? И последний макет расширяет первый, который вы показали? Посмотрите, что произойдет, если в макете FOSUserBundle вы определите пустой '{% block scripts%} {% endblock%}'. – Artamiel

+0

Собственно, это была ошибка. Блок называется «javascripts» в обоих местах, я исправил свой первоначальный вопрос. Кроме того, удаление {{parent()}} из шаблона макета FOSUserBundle не имеет значения. –

+0

Можете ли вы показать весь код того, как вы переопределяете шаблон register_content.html.twig из FOSUserBundle? –

ответ

1

После РЕДАКТИРОВАНИЯ ситуация более ясна.

Поведение, которое вы ожидаете, работает только с наследованием шаблона; он не будет работать с include, как у вас есть в app/Resources/FOSUserBundle/views/Registration/register.html.twig.

Чтобы сделать то, что вы хотите, выполните одно из следующих действий:

  • Места инлайн JavaScript код из 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 наследоваться от app/Resources/FOSUserBundle/views/Registration/register_content.html.twig и переопределить его блоки по мере необходимости (register_content.html.twig не распространяется layout.html.twig, так что это не имеет смысла)