gpt4 book ai didi

forms - CakePHP:向表单添加字段(动态)

转载 作者:行者123 更新时间:2023-12-03 22:24:15 25 4
gpt4 key购买 nike

我正在尝试向我的 CakePHP 表单动态添加字段,但似乎我使用的每种方法都有自己无法修复的缺点。这是我尝试过的:

  • 不要添加新输入,只需用逗号分隔单个输入中的值。这看起来很容易,但在尝试分解输入并将每个值保存在数据库的新行中时会出现一些问题。但是当我不得不编辑这些值时我放弃了这个想法......收集所有值并将它们内爆到输入中,然后当我保存时检查所有值是否仍然存在,如果没有,从表中删除相应的行.. .要做很多工作。
  • 我尝试使用 JS 即时创建新的输入。但是在这里,我偶然发现了两个问题:Security 组件,它进行了一次黑洞尝试(我真的需要这个组件来检查表单的完整性)以及如果验证失败,我的输入将与它们的值一起消失的事实.我必须补充一点,单个模型可能有无限的字段,因此输入将类似于 name=[Model][14][field], name=[Model][17][field] ,因此我不能限制安全组件不验证那些特定的输入(我只在我用 JS 添加它们时才知道它们的 ID,无论如何,在安全组件构建其数据之后的方式)。
  • 使用 PHP 添加字段(因此,在添加新字段后重新加载页面),但我似乎无法找到如何在另一个现有字段之后添加字段,以及如何在验证错误时维护输入数据。

  • 任何建议都非常感谢!

    谢谢!

    最佳答案

    我不确定我可以给你一个完整的答案,但希望我能给你一些想法。

    在尝试为民意调查创建管理系统时,我发现自己处于类似的情况。

    每个 Poll 都有许多 PollOptions,我希望可以在我的 polls/admin_edit 页面上根据需要动态添加尽可能多的投票选项。

    我使用 CakePHP 的内置功能和一些 Javascript 来管理它。

    在 admin_edit View 中构建表单时,我首先放入 Poll 字段,然后在该字段下添加了以下内容:

    <div id="poll-options">
    <?php
    if (isset($this->data['PollOption'])) {
    $i = 0;
    foreach ($this->data['PollOption'] as $opt) {
    echo $form->hidden("PollOption.$i.id");
    echo $form->input("PollOption.$i.name", array('label' => "Option " . ($i + 1)));
    $i++;
    }
    }
    ?>
    </div>
    $this->data在 PollsController 中设置。如果 Poll 已经有相关的 PollOptions,它们也包含在 $this->data 中。 .此外,如果表单已经提交并且存在验证错误,所有需要的 PollOption 字段会在页面显示时再次构建,因为它们仍在 $this->data 中。从 Controller 。

    这样可以确保我始终在 View 中包含我需要的字段。

    提交表单时,我尝试用简单的方式保存数据
    $this->Poll->saveAll($this->data, array('atomic' => false, 'validate' => 'first'));

    (如果您不确定上述语法,可以查看 CakePHP API 或文档)

    我使用 Javascript (jQuery) 动态添加 PollOption 字段:
    $('#add-option-button').click(function(event){
    var optionCount = $('#poll-options > div').size() + 1;
    var inputHtml = '<div class="input text"><label for="PollOption' + optionCount + 'Name">Option ' + optionCount
    + '</label><input id="PollOption' + optionCount + 'Name" type="text" name="data[PollOption][' + optionCount + '][name]" /></div>';
    event.preventDefault();
    $('#poll-options').append(inputHtml);
    });

    您提到您自己正在执行此操作,但是如果您不尝试使用表单上的安全组件,您应该不会遇到任何问题。

    希望这有助于为您指明正确的方向,或者给您一些想法。

    关于forms - CakePHP:向表单添加字段(动态),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6002078/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com