В настоящее время я работаю над приложением 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>
Проблемы Я сталкиваюсь сейчас в том числе JavaScripts от встроенного контроллера. В моем случае вид продолжается частично и полностью отображается как 1 единица, прежде чем он будет вставлен на главную страницу. В этом случае я могу только поместить свой javascript в блок content
, что означает, что у меня будут <script>
теги в тегах <div>
. Я также предпочел бы иметь сценарии в конце тела для производительности пользовательского интерфейса.
Как я могу структурировать свои шаблоны (или это даже возможно), чтобы я мог отображать соответствующие фрагменты из представления встроенного контроллера в соответствующие блоки в шаблоне, который встраивает контроллер? В моем текущем шаблоне библиотека YUI будет загружена после разметки HTML с встроенным контроллером, поэтому доступ к использованию библиотеки YUI внутри встроенного контроллера будет невозможным.
[Duplicate] (http://stackoverflow.com/q/9224347/1146363), хотя его легче читать. Я не думаю, что результаты встроенного контроллера можно разделить на несколько блоков. Возвращаемый результат - это только обработанный html, а не шаблон ветки. Я думаю, вам нужны два встроенных контроллера: один для контента и один для javascript. А в некоторых случаях, возможно, даже для css. – Cerad
Hm. Наличие 2 встроенных контроллеров меньше, чем идея, и не очень элегантное imo. – F21
Ну, на самом деле вам не нужны два контроллера, только два вызова одного и того же контроллера с аргументом, который указывает, что вы хотите, с помощью {'generate': 'html' или 'js' или 'css'}. А затем соответствующим образом настройте свой шаблон. – Cerad