【问题标题】:Zend Framework Dynamically added fields of a form and populateZend Framework 动态添加表单字段并填充
【发布时间】:2014-04-12 05:18:49
【问题描述】:

我一直在尝试创建一个表单,用户只需按下一个按钮,表单就会添加一个新字段供用户使用。我有 2 个动态添加的字段类型。

首先是用户可以上传文件的字段,通过按添加按钮,另一个字段将粘贴在当前字段下方并可供使用。

我遵循了一个关于如何使用 ajax 和 jQuery 完成此操作的旧指南。

确切地说,本指南:http://www.jeremykendall.net/2009/01/19/dynamically-adding-elements-to-zend-form/

正如您所见,它是 2009 年推出的,有点过时,但在当前 Zend Framework 版本 1.11.11 下仍然有效

然而问题出现了,因为我想要表单的编辑/更新版本。我需要填充它的字段,但首先我需要为要存储的数据创建足够的字段。因此,当有 3 个文件已上传时,它应该创建 2 个附加字段并将 3 个文件名放在这些字段中准备好进行编辑和更新。简单地使用$form->populate($stuff) 是行不通的

我只是不知道如何实现这一点,关于动态添加字段的教程只涉及addAction,而不是如何在这些条件下创建editAction

是否有任何关于如何创建和管理此类表单的教程?我确定我不是唯一一个有想法构建这种表单的人吗?

如果有要求,我可以添加我的代码,但它与指南中的示例相同,只是表单中的一组元素不同。

添加一个使用它的小例子。 用户添加一个包含 3 个文件的项目,这些文件与文件名一起上传,因此在数据库中显示如下:File_Id : '1' , File_Name : 'SomeFile' , File_location : 'somewhere/on/my/pc/SomeFile.txt'.

现在用户意识到他忘记了一个文件或想从该列表中删除一个文件,他进入编辑页面,在这里我希望表单显示以前添加的文件名。因此,如果有 3 个文件,它显示 3,当有 2 个文件时,它显示 2,依此类推。我如何构建一个表单以根据上传文件的数量动态添加字段,然后填充它们?

非常感谢任何有关如何处理此问题的建议 :)

【问题讨论】:

    标签: zend-framework zend-form populate zend-form-element dynamic-forms


    【解决方案1】:

    您可以使用表单的半魔法setXxx() 方法。

    表格内:

    public function setFiles($files) {
        foreach ($files as $file) {
            $this->addElement(/* add a file element */);
            //do other stuff, like decorators to show the file name, etc.
        }
    }
    

    在您的控制器中:

    $files = $model->getFiles();
    $form = new Form_EditFiles(array('files' => $files));
    

    通过传递带有键files 的数组,您将使表单尝试调用您在上面方便地提供的名为setFiles() 的方法。

    这应该会推动你朝着正确的方向前进,至少我希望如此。

    【讨论】:

      【解决方案2】:

      如果我理解正确,您希望填充文件上传字段,出于安全原因,这是不可能的。

      编辑:

      您可以通过$form->addElement() 在控制器内部添加元素(基本上就像教程中的$this->addElement() 语句)

      【讨论】:

      • 我已经更新了我的帖子,并简要说明了我想要实现的目标,因为它并不完全清楚。我不想让他们自己的文件只是他们在我的数据库中注册的名称,作为我表单中的动态构建列表。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 2018-04-19
      相关资源
      最近更新 更多