Как работает AJAX с TWIG

Я пытаюсь понять, как Twig может загрузить шаблон через AJAX. С их сайта ясно, как загрузить шаблон (http://twig.sensiolabs.org/doc/api.html)

echo $twig->render('index.html', array('the' => 'variables', 'go' => 'here'));

Но как это работает для вызова AJAX? Как бы вы сказали Twig, что хотите "визуализировать" что-то, что является лишь частью index.html... и не перезагружать всю страницу? Я посмотрел пример Twig подошвы Ajax (http://twig.sensiolabs.org/doc/recipes.html), но это не объясняет, как Twig знает, какую часть страницы вы хотите изменить. Предполагая, что ваш вызов Ajax приводит к обновлению содержимого страницы. Мне просто нужен простой пример этого, что-то большее, чем на странице рецептов Twig.

Ответ 1

Существует несколько способов сделать это:

1) Отделите свой index.html в нескольких файлах, таких как index.html и content.html. Затем используйте include функцию в index.html, чтобы включить content.html.

Пример:

if(isAjaxRequest()) //try to find the right function here
   echo $twig->render('content.html', array('the' => 'variables', 'go' => 'here'))
else
   echo $twig->render('index.html', array('the' => 'variables', 'go' => 'here'));

Изменить: Если вы выполняете свой запрос ajax с помощью jQuery, например:

$.get('yoururl', function(data) {
  $('#divtoremplace').html(data);
});

2) Используйте request.ajax boolean в вашем index.html

{% if request.ajax == false %}
<p>My header,  not reloaded with ajax</p>
{% endif %}

<p>My content, reloaded with ajax</p>

{% if request.ajax == false %}
<p>Other content,  not reloaded with ajax</p>
{% endif %}

Не уверен во втором, но это должно делать трюк в соответствии с документацией. Лучший способ - это первое решение, отделите свой код.

Ответ 2

Непосредственно в шаблоне:

{% if app.request.isXmlHttpRequest() %}
  // code if ajax request
{% else %}
  // code if not ajax request
{% endif %}