2010-06-26 80 views
0

我有一个处理上传的Zend_Form_Element_File元素。我想知道的是,是否有可能只使用Zend_Form_Element_File元素,并仍然保持最初上传的值?通常这种事情将通过隐藏字段来处理,但我想保留在Zend_Form_Element_File元素中。在Zend_Form_Element_File中维护值

所以,我想如何做到这一点:

  1. 选择一个文件(foo.txt的)
  2. 上传与硬编码
  3. 在数据库中存储的文件名的目标文件
  4. 重新加载文件,但用数据库中存储的值预先填充文件元素(?)(foo.txt)
  5. 将该值传回时提交(或读取新提交的值(bar.txt)

我试着重写setValue()方法(抓住吸管),添加一个自定义装饰器,它将一个隐藏的元素放在文件元素旁边,并且将所有其他的装饰器和基本上更改为隐藏的字段领域。

我没有超级好运与任何因为挫折的约束。

那么,是否有可能做这样的事情?做到这一点的最佳方法是什么(除了在文件元素之间进行切换或者有一个空元素)?

谢谢。

回答

3

您不能有意义地预先填充HTML文件输入,因为您永远不会知道文件在用户本地磁盘上的位置。这是设计。

如果你已经有上传的文件,并重新显示无论出于何种原因形式(因为其他一些领域无法验证,或用户被记录后编辑),你不希望预 - 填充文件输入。您需要显示(只读)关于该文件的一些信息(文件名,或者它是否为图像,可能是缩略图),并提供和输入文件,用户可以选择使用该文件输入替换文件。

+0

是的,这是最佳做法。您是否有任何关于如何在单个Zend表单元素(例如Decorator)中完成这些工作的知识? – allnightgrocery 2010-06-26 19:59:55

+0

您可能可以使用装饰器,只需将Zend_Form_Element_File扩展为某种更具体的应用程序特定元素即可。 – timdev 2010-06-26 20:27:41