2012-07-27 83 views
1

我想在Symfony2中创建一个表单,它显示一组单选按钮,取决于属于同一表单的组合框中的选定值。
我在Symfony2中找不到合适的解决方案,可以让我拥有这个功能。
是否有任何方法使用Symfony2框架至少部分的实现或我应该手动生成表单?Symfony2动态表单域

+0

@Bogdan这听起来像你想做什么是动态HTML(单选按钮会更改,恕不页面当有人从组合框中选择值时刷新)是否正确? – Matt 2012-07-27 12:57:51

+1

@Matt是的,你是对的。我不希望Symfony为我提供一个特定的解决方案,但是根据过去的经验,我已经了解到,即使涉及JavaScript,它也可能会有所帮助。一个很好的例子是插入原型的集合表单类型,它可以用来通过JavaScript来生成所需的同一类型的相同类型的字段。 – Bogdan 2012-07-27 13:05:05

+2

@Yehonatan你不在那里;框架**非常有用,但不是每个人都是他们的直接专家,或者可以包含Web开发的多个方面。框架加快了开发速度,有助于提高安全性并使编写代码的人员更容易(大部分情况下)。 – Matt 2012-07-27 13:24:55

回答

4

你在找什么是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; 
+0

我明白了,所以这个查询一个PHP脚本,通过Symfony2的方式,可以返回适当的形式,对吧?如果我有这个权利,我将不得不硬编码表单类型对象中可用的选项集。我讨厌推它,但是如果应该从数据库中检索组合中每个选项的可用选项,该怎么办? – Bogdan 2012-07-27 13:14:30

+0

@Bogdan我会编辑我的答案是更完整一点。 – Matt 2012-07-27 13:16:36

+0

好的,您已经给了我一个可以接受的答案,所以我会将您的解决方案标记为已接受。感谢您的耐心:) – Bogdan 2012-07-27 13:20:11

1

你可以尝试使用Symfony2的表单生成器,它允许构建形式编程。

这将是可能的,如果你能确定形式施工前实体...