2

我一直在尝试创建一个表单,用户只需按下一个按钮,表单就会添加一个新字段供用户使用。我有 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,等等。我如何构建一个表单以根据上传文件的数量动态添加字段,然后填充它们?

任何关于如何处理这个问题的建议都非常感谢:)

4

2 回答 2

3

您可以使用表单的半魔术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));

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

这应该将您推向正确的方向,或者至少我希望如此。

于 2012-05-30T11:17:21.423 回答
1

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

编辑:

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

于 2012-05-30T08:55:58.627 回答