1

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

4

2 回答 2

4

您正在寻找的是 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相同的符号来查找您要查找的元素),但这将返回带有mySelectid 属性的元素。

.change()将 onChange 事件处理程序设置为function()括号内的定义。 $.post是执行 AJAX 的 jQuery 简写post(相对于 a get),它在没有页面加载的情况下发送到backgroundScript.php 。backgroundScript.php返回 200 状态(即“一切正常,这是我的输出”)时,它将执行回调函数function(data)

backgroundScript.phpval作为 $_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;
于 2012-07-27T13:08:12.907 回答
1

您可以尝试使用 symfony2 表单构建器,它允许以编程方式构建表单。

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

于 2012-10-24T07:21:07.047 回答