Symfony2 动态表单字段

Symfony2 dynamic form fields

本文关键字:字段 表单 动态 Symfony2      更新时间:2024-03-11

我想在Symfony2中创建一个表单,该表单根据属于同一表单的组合框中的选定值显示一组单选按钮。
我无法在Symfony2中找到合适的解决方案,使我能够拥有此功能。
有没有办法至少在部分实现中使用Symfony2框架,或者我应该手动生成表单?

你要找的是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()$.post是jQuery的简写,用于执行AJAX post(而不是get(,发送到backgroundScript.php而无需加载页面。当 backgroundScript.php 返回 200 状态(即"一切正常,这是我的输出"(时,它将function(data)执行回调函数。

backgroundScript.php 将接收 val 作为 $_POST 变量,并执行"某些操作"来确定应显示哪些单选按钮,然后将输出写入屏幕。

编辑 (更多信息(:

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表单生成器,它允许以编程方式构建表单。

如果您可以在构建表单之前确定实体,这将成为可能......