Как передать переменную JavaScript, чтобы включить шаблон Twig?

наверное, это просто сделать, но до сих пор я не мог заставить его работать.
Вопрос в том, как передать переменную из JavaScript/Jquery в include шаблона twig во время выполнения.

Вот что я пытаюсь сделать в Ajax success function:

    $.ajax({
    //some code

    success: function (response, textStatus, jqXHR) {
    var partita = response.partita;

    $("#myDiv").innerHTML({% include ":staff:ViewInfoPartita.html.twig" with {"partita" : partita} only %});
}

});

Ошибка: «переменная» partita » не существует.»

2 ответа

  1. Twig полагается на php. Twig и PHP выполняются на сервере, а Javascript-на клиенте, поэтому вы не можете установить значение переменной Twig равным переменной Javascript без отправки значения на сервер. Однако можно задать для переменной Javascript значение, равное переменной Twig:

    <script type="text/javascript">
      var foo = '{{ foo }}';
    </script>
    

    Для отправки значения Javascript в twig необходимо использовать AJAX. С jQuery это выглядело бы примерно так (самый простой пример возможен):

    var variableToSend = 'foo';
    
    $.post('{{ path('your_ajax_route') }}', {variableKey: variableToSend});
    

    На сервере необходимо получить переменную, отправленную в сообщении:

    $variable = $request->get('variableKey');
    
  2. Twig обрабатывается до того, как вы получите ответ в своем клиенте, но есть трюк, возможно, вы можете применить, если ваша переменная partita «не будет изменена» в вашем шаблоне twig фильтром или другой обработкой, поэтому вы можете сделать это:

    var partita = response.partita;
    var tempHtml = '{% include ":staff:ViewInfoPartita.html.twig" with {"partita" : "myTempPartita"} only %}';
    tempHtml.replace("myTempPartita", partita;
    $("#myDiv")innerHTML(tempHtml);