В настоящее время я работаю над приложением symfony2 и использую встроенные контроллеры. Мои встроенные контроллеры похожи на виджеты, которые должны инкапсулировать свой собственный набор функций и могут быть встроены в любом месте, и все же они должны функционировать.
У меня есть контроллер, называемый пользователями в сети. Представление, которое это генерирует, просто, просто список пользователей онлайн. Но я хотел бы добавить в это представление некоторый javascript, чтобы я мог использовать ajax для получения информации о пользователе, на которого нажали.
Контроллер в основном возвращает представление:
return $this->render('AppBundle:Users:usersOnline.html.twig', array('somedata' => $data);
Вот вид для этого контроллера:
{% extends partial.html.twig" %}
{% block content %}
<ul>
<li><a href="site.com/ajax/user/1">User 1</a></li> (this would all be generated using 'somedata')
<li><a href="site.com/ajax/user/2">User 2</a></li>
....
<ul>
{% endblock content %}
{% block scripts %}
..some javascript for interacting with this widget
{% endblock %}
Это часть, которая расширена с:
{% block content %}
{% endblock content %}
{% block scripts %}{% endblock %}
Вот главная страница, в которую встроен контроллер:
{% "base.html.twig" %}
{% block title %}Main{% endblock %}
{% block content %}
..some markup here
<div id="usersonline">
{% render "AppBundle:Users:usersOnline" with {'max': 4} %}
</div>
{% endblock %}
{% block scripts %}
..some javascript
{% endblock %}
Это база, на которую он распространяется:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{% block title %}{% endblock %} - App</title>
...Some stylesheets
</head>
<body>
{% block content %}{% endblock %}
<script src="http://yui.yahooapis.com/3.5.0pr2/build/yui/yui-min.js"></script>
{% block scripts %}{% endblock %}
</body>
</html>
Проблема, с которой я сейчас сталкиваюсь, заключается в включении javascript-кодов со встроенного контроллера. В моем случае представление расширяется частично и полностью отображается как 1 единица, прежде чем оно будет вставлено на главную страницу. В этом случае я могу только поместить свой javascript в блок content
, что означает, что у меня будут теги <script>
в тегах <div>
. Я также предпочел бы иметь скрипты в конце тела для производительности пользовательского интерфейса.
Как мне структурировать свои шаблоны (или это вообще возможно), чтобы я мог рендерить соответствующие фрагменты из представления встроенного контроллера в соответствующие блоки в шаблоне, в который встроен контроллер? В моем текущем шаблоне библиотека YUI будет загружена после рендеринга HTML-кода встроенного контроллера, поэтому доступ к библиотеке YUI во встроенном контроллере будет невозможен.