【问题标题】:Symfony2 dynamic form fieldsSymfony2 动态表单域
【发布时间】:2012-07-27 12:50:05
【问题描述】:

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

【问题讨论】:

  • @Bogdan 听起来您正在尝试做的是动态 HTML(当有人从组合框中选择值时,单选按钮将在不刷新页面的情况下更改)对吗?
  • @Matt 是的,你是对的。我不希望 Symfony 为我提供特定的解决方案,但从过去使用此框架的经验中我了解到,即使涉及 JavaScript,它也可以证明有些用处。一个很好的例子是集合表单类型,它插入一个原型,该原型可用于通过 JavaScript 生成尽可能多的相同类型的字段。
  • @Yehonatan 你离题太远了;框架是非常有用的,但并不是每个人都是他们的直接专家,或者可以整合 Web 开发的多个方面。框架可以加快开发速度、帮助提高安全性并让编写代码的人(在大多数情况下)更轻松。

标签: php javascript forms symfony


【解决方案1】:

您正在寻找的是 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(与 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;

【讨论】:

  • 我明白了,所以这会查询一个 PHP 脚本,它通过 Symfony2 可以返回正确的形式,对吧?如果我做对了,我将不得不对表单类型对象中可用的选项集进行硬编码。我讨厌推送它,但是如果应该从数据库中检索组合中每个选择的可用选项怎么办?
  • 好的,您已经给了我一个可以接受的答案,所以我会将您的解决方案标记为已接受。谢谢你的耐心:)
  • @Bogdan 有关 jQuery 的更多信息,请查看 W3Schools:w3schools.com/jquery/default.asp
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-06-07
    • 2012-04-02
    • 1970-01-01
    • 2013-11-06
    • 2013-12-07
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多