Ранее я разместил вопрос о возможности получить выбранное значение selectBox и назначить его службе, вызываемой в twig. После некоторого исследования мне удалось реализовать то, что предлагали здесь некоторые ребята.
Используя ajax, я отправил выбранное значение своему php-контроллеру, который отправил выбранное значение в мой интерфейс, и yéy twig может видеть переменную!
вот вызов ajax:
<script>
$(document).ready(function () {
$('listFolders1').on('change', function() {
var selected = $('#listFolders1 :selected').text();
$.ajax({
type: "POST",
url: "{{ path('ess') }}",
data: selected,
success: function (response) {
console.info(response);
},
error: function (response, xhr, status) {
alert("error" + status);
}
});
});
});
</script>
а вот мой контроллер
public function essAction(Request $request)
{
$data = $request->request->get('data');
return $this->render('PrestaShopTestBundle:Test:full.html.twig', array(
'data' => $data,
));
//return new Response($data);
}
и конечно это мой файл маршрутизации
ess:
path: /ess
defaults: { _controller: PrestaShopTestBundle:Test:ess }
Я пытаюсь отобразить свою переменную вот так в ветке
{% if data is defined %}
{{ data }}
{% endif %}
ошибок нет, он меня просто ИГНОРИРУЕТ. Ничего не происходит, даже URL-адрес не меняется.
PS: ListFolders - это мой SelectBox
да, это помогло :) теперь я могу отображать свои данные в консоли .. но все еще не могу получить к ним доступ через ветку :(
В обратном вызове успеха вы помещаете код для обновления вашего интерфейса, например: success: function(response) { $('#ess').html(response); },. Вы уже получили доступ и обработали свой запрос ajax с помощью twig внутри действия essAction. Эта часть уже выполнена, этот запрос ajax теперь получил вывод essAction обратно в javascript. Что вам теперь нужно отобразить.
да, я могу это сделать ... я могу отобразить это в div, моя проблема в том, что я хочу назначить его переменной веточки, такой как эта {% set data = data%}, а этого не происходит :(
Это просто невозможно. Вы должны понимать, что twig - это технология на стороне сервера, twig компилируется в PHP, которые интерпретируются на сервере и затем отправляются клиенту. Это означает, что весь twig / php уже обработан, прежде чем пользователь сможет что-либо изменить в нем. Единственное, что теперь можно обойтись без перезагрузки страницы (и использования сеанса или хранилища любого типа), - это использовать ajax и соответствующим образом обновить интерфейс.
хорошо .. спасибо, по крайней мере, я узнал что-то новое .. мне придется подумать о другом алгоритме для выполнения моей задачи .. большое спасибо: D





Ваша переменная
dataневерна. Вы должны передать действительный объект, чтобы он появился в вашей переменной$_POST, например.data : { 'selected': selected },, это заставит$_POSTсодержать индексselectedс выбранным значением