2016-12-29 10 views
0

おそらくそれは簡単ですが、今までは動作させることができませんでした。 質問は、実行時にJavaScript/Jqueryの変数をtwigテンプレートのインクルードに渡す方法です。ここでJavaScript変数を渡してTwigテンプレートを含めるにはどうすればいいですか?

は、私はAjaxの成功関数の中でやろうとしているものです:

$.ajax({ 
    //some code 

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

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

}); 

スローエラーがある:「存在しない 『』変数」パルティータは、

+2

あなたはjavascriptとphpの間で混乱しています。小枝のインクルードはサーバー上でレンダリングされますが、レスポンスは1つのレスポンス(ページ)です。あなたは、あなたが望むところであなたのjavascript variabeleを簡単に使うことができますが、あなたがそれを使う前にあなたがvariabeleを定義していることを確かめてください。 –

+2

とTwigは、サーバ側でPHPによってレンダリングされます。 Javascriptはクライアント側のブラウザで実行されます。 PHP/Twigはすでにその時点までに終了しています。ブラウザであなたのページのソースを見てください。そこに表示されているものは、Webアプリケーションによってレンダリングされます。 –

答えて

0

TwigはPHPに依存しています。 TwigとPHPはサーバー上で実行され、Javascriptはクライアント上で実行されるため、値をサーバーに送信することなく、JavaScript変数に等しいTwig変数を設定することはできません。ただし、小枝変数に等しくなるようにJavascriptの変数を設定することができます。

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

あなたはAJAXを使用する必要があるだろう小枝するJavascriptの値を送信します。 jQueryを使って、それはこのようなもの(可能な限り最も基本的な例)になります。

$variable = $request->get('variableKey'); 
0

小枝を前にproccesedさ:サーバー上の

var variableToSend = 'foo'; 

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

を、あなたは郵便で送られた変数を受信する必要がありますあなたは、クライアントのレスポンスを取得するが、トリックは、あなたがこれを行うことができますので、あなたの変数パルティータは、フィルタまたは他の処理によって、あなたの小枝テンプレートに「変更されません」場合は、適用することができます多分あり:

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

それはちょうどいくつかのプレーンテキストを別のjavascriptに取って代わるトリックではありません。もしpartita変数にhtmlの予約語やシンボルが入っていたら、これは壊れてしまうでしょう。 – goto

+0

@gotoここで重要なのは、テンプレート内のvar partitaの役割によっては、このアプローチが役に立つかもしれないということです。 – Hokusai

関連する問題