我一直在尝试创建一个表单,用户只需按一个按钮,表单就会添加一个新字段供用户使用。我有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个等。我如何构建一个表单,根据上传文件的数量动态添加字段,然后填充它们?
有关如何处理此问题的任何建议都非常感激:)
答案 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()
语句一样)