我想在 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()
括号内的定义。 $.post
是执行 AJAX 的 jQuery 简写post
(相对于 a 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 表单构建器,它允许以编程方式构建表单。
如果您可以在构建表单之前确定实体,这将是可能的......