Symfony2动态表单域
我想在Symfony2中创建一个表单,它显示一组单选按钮,取决于属于同一表单的组合框中的选定值。
我在Symfony2中找不到合适的解决方案,可以让我拥有这个功能。
是否有任何方法使用Symfony2框架至少部分的实现或我应该手动生成表单?Symfony2动态表单域
你在找什么是AJAX。这可以用直接的JavaScript或jQuery来实现(jQuery更简洁,更易于使用)。
这里有一个jQuery的存根,你得到的是什么人,何时,一个想法:如果你不熟悉AJAX & jQuery的
<script language="javascript">
$('#mySelect').change(function() {
$.post('backgroundScript.php', {
val: $(this).val()
}, function(data) {
$('#radioDiv').html(data);
});
});
</script>
,我会解释这是怎么回事。 $('#mySelect')
几乎相当于javascript的getElementById()
函数。它们是不是相同的功能(jQuery使用与css相同的符号来查找要查找的元素),但是这将返回元素作为其id属性的mySelect
。
.change()
将onChange事件处理程序设置为括号内定义的function()
。 $.post
是用于执行AJAX post
(而不是get
)的jQuery速记,即发送到backgroundScript.php,无需加载页面。当backgroundScript.php返回200状态(即“一切正常,这是我的输出”),它将执行回调函数function(data)
。
backgroundScript.php将作为$ _POST变量接收val
并执行“某事”以确定应显示哪个单选按钮,然后将输出写入屏幕。
EDIT(详细信息):
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的表单生成器,它允许构建形式编程。
这将是可能的,如果你能确定形式施工前实体...
@Bogdan这听起来像你想做什么是动态HTML(单选按钮会更改,恕不页面当有人从组合框中选择值时刷新)是否正确? – Matt 2012-07-27 12:57:51
@Matt是的,你是对的。我不希望Symfony为我提供一个特定的解决方案,但是根据过去的经验,我已经了解到,即使涉及JavaScript,它也可能会有所帮助。一个很好的例子是插入原型的集合表单类型,它可以用来通过JavaScript来生成所需的同一类型的相同类型的字段。 – Bogdan 2012-07-27 13:05:05
@Yehonatan你不在那里;框架**非常有用,但不是每个人都是他们的直接专家,或者可以包含Web开发的多个方面。框架加快了开发速度,有助于提高安全性并使编写代码的人员更容易(大部分情况下)。 – Matt 2012-07-27 13:24:55