Zend Framework动态添加表单的字段并填充

时间:2012-05-30 07:25:49

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

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

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

2 个答案:

答案 0 :(得分: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));

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

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

答案 1 :(得分:1)

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

编辑:

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