Symfony2で、同じフォームに属するコンボボックスで選択した値に応じてラジオボタンのセットを表示するフォームを作成したいと思います。
Symfony2で、この機能を使用できる適切なソリューションを見つけることができませんでした。
少なくとも実装の一部でSymfony2フレームワークを使用する方法はありますか、それとも手動でフォームを生成する必要がありますか?
2 に答える
あなたが探しているのはAJAXです。これはそのままの javascript または jQuery で実装できます (jQuery ははるかにクリーンで使いやすいです)。
何が起こるかを理解するための jQuery スタブを次に示します。
<script language="javascript">
$('#mySelect').change(function() {
$.post('backgroundScript.php', {
val: $(this).val()
}, function(data) {
$('#radioDiv').html(data);
});
});
</script>
AJAX と jQuery に慣れていない場合は、何が起こっているのかを説明します。$('#mySelect')
JavaScriptのgetElementById()
機能とほぼ同等です。それらは同じ機能ではありません(jQuery は、探している要素を見つけるために css と同じ表記法を使用します) が、これはmySelect
id 属性として要素を返します。
.change()
onChange イベント ハンドラをfunction()
括弧内に定義されたものに設定します。 ページをロードせずにbackgroundScript.phpに送信されるAJAX ( ではなく)$.post
を実行するための jQuery の省略表現です。backgroundScript.phpが200 ステータス (つまり、「すべて問題ありません。これが私の出力です」) で戻ると、コールバック関数が実行されます。post
get
function(data)
backgroundScript.phpは $_POST 変数として受け取りval
、表示するラジオ ボタンを決定するために「何らかの処理」を行い、出力を画面に書き込みます。
編集(詳細):
データベースに基づいてラジオ ボタンを決定する場合、 backgroundScript.phpは次のようになります。これは、セキュリティや非推奨の機能 (例: )を考慮して書かれていないことに注意してください。mysql_*
<?php
// backgroundScript.php
$masterVal = $_POST['val'];
$output = "";
$query = "SELECT bt.button_value, bt.button_label
FROM button_table as bt
WHERE bt.button_master_id = " . $masterVal;
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
$output .= "<input type='radio' name='radioGroup' value='" .
$row['button_value'] . "' /> " . $row['button_label'];
}
echo $output;
プログラムでフォームを作成できる symfony2 フォーム ビルダーを使用してみてください。
これは、フォームを作成する前にエンティティを特定できれば可能です...