我正在开发基于Zend Framework(PHP)的松散形成的非常糟糕的代码库,因此无法使用ORM,也无法使用任何其他框架。我曾尝试使用Zend_Form,但我发现文档太稀疏了(我用Zend_Form开发了一些小形式但没有这么大的东西)。
我需要创建一个长形式(6页长)。用户可以根据需要在每个步骤之间切换,直到他们尝试提交表单(在我看来不是一个好主意,但这是规范所说的)时,可以完全不进行验证。
在流程结束时,将验证表单,然后将数据拆分为数据库中的许多不同表。哦,只是为了让事情变得有趣:这种形式有三个版本,都有轻微的字段改变,没什么大不了的。它们都将数据存储在同一个表中。
那么,这样做的最佳方法是什么?我应该如何构建它,如果你必须构建这样一个表单你会怎么做?我用PHP编写它,但也希望听到其他语言程序员的回复。此外,如果有任何图书馆或工具来构建这样的表格,我也希望听到这些。
答案 0 :(得分:1)
从未使用ZF完成此操作,仅在提交最后一步时从未使用验证完成此类表单,从未完成多步骤表单,用户可以根据需要逐步跳转(我的意思是从第1步跳到第4步,例如)。
我所做的是一个5步形式(第4步中可能有3个子步骤)。用户可以一步一步地执行步骤,也可以一次返回一步。提交并验证每个步骤 - 直到有效用户无法跳转到下一步但他仍然可以返回 - 插入的值存储在会话中。我创建了一个模型(包含其他子类的结构化类),因此在提交每个步骤并且有效后,数据将被设置到存储在会话中的此模型中。
如果您需要一个非常大的表单,用户可以根据需要跳过步骤,我会考虑两种方式:
不能告诉你两种方式都有多难,因为我没有使用ZF做这样的事情......希望永远不会有。
我还会考虑与客户交谈,并解释只在最后一步验证是有点愚蠢的用户联合国友好...
答案 1 :(得分:0)
我会在几个部分将其分开:
表单处理
这里有两个主要选择(没有强烈的感情):
在一个页面中创建整个表单并使用JavaScript(或jQuery等库)在表单部分之间移动;您可以选择在此处进行一些客户端验证。
每页创建一个表单,让PHP处理结转,方法是使用会话或使用隐藏的输入字段保留表单中的所有内容(我个人更喜欢会话)。
只需传递第一页中的版本并通过采用策略模式相应地更改表单,即可处理轻微的变化。
最终提交
对于验证,您可以使用PHP的filter
扩展名(默认btw附带);它非常体面和可扩展。
如果验证失败,最好收集所有错误并将其显示给用户(可能有超链接跳转到各自的部分)而不是仅显示第一个错误;在每个部分你可能会再次提到错误以便于使用(用户不喜欢来回跳转)。
将整个表单存储在数据库中,在变体方面与显示表单本身没有太大区别。再次使用策略模式。
希望这涵盖大部分内容,如果您认为我可以改进,请告诉我。
答案 2 :(得分:0)
由于无法使用ORM或框架而受到限制,因此您可以查看序列化并将对象存储为会话对象。
创建一个“表单”类,其中包含一些特定于表单的属性,并在每个表单提交后设置这些值。