如何在 Zend Framework 2 中实现表单预览页面?

Posted

技术标签:

【中文标题】如何在 Zend Framework 2 中实现表单预览页面?【英文标题】:How to implement a form preview page in Zend Framework 2? 【发布时间】:2016-08-31 12:14:07 【问题描述】:

在我当前的 ZF2 项目中,我有一个复杂的Form,其中包含多个嵌套的Fieldsets,它们反映了要保存在后台的对象的结构。目前,数据直接发送到Controller 并保存到数据库中(如果有效)。

现在应该实施一个中间步骤:用户应该有机会在将输入数据保存到数据库之前检查它。如果他认为它是正确的,则应该提交表单数据并将其保存到数据库中;如果用户决定必须编辑表单,他应该能够返回到表单并更正它。 (当然所有这些都在一个循环中,直到用户对表单感到满意并提交它。)

也就是说,需要一个预览页面。此页面/action 应该获取数据并以某种方式显示它(作为表格或然而)。数据需要临时存储在某个地方,并准备好“水合”到Form 对象并保存。如果用户想更新表单,应该恢复表单。

如何实现此要求?

更新

我正在寻找服务器端解决方案。预览应该是一个新页面,而不是同一页面上的 JavScript/客户端生成的 html(用于跟踪和其他目的)。

【问题讨论】:

你不能序列化对象并将它们存储在会话中。然后在用户接受数据后取消序列化对象以将它们保存到数据库中。 你指的是什么对象? Form?以及存储在哪里——在会话中? 【参考方案1】:

我想说最好的解决方案是实现一个客户端 (java-) 脚本,该脚本在您执行 POST 请求之前执行。您可以捕获表单提交事件并呈现客户端视图,在该视图中显示所有表单字段(名称和值)的当前状态。如果用户单击accept,您将继续POST 操作。如果用户单击取消,您将返回到允许进行其他更改的表单视图,并且整个事情会重复。

找到如何做到这一点的例子应该不难......

this blog post 是一个例子,但the help of Google 可以找到更多示例。

【讨论】:

感谢您的回答!好吧,理论上它会起作用,但是使用这种方法,我需要复制所有服务器端实现的验证逻辑,并在 javascript 中重新实现它。 您写道:"用户应该有机会在将输入数据发送到服务器之前检查输入数据;如果他认为正确,则应提交表单并保存到数据库",这在不添加任何验证的情况下是可能的:1) 用户检查他的输入。 2)当用户认为一切都很好时,您仍然可以让服务器完成其工作并进行验证。但是,如果您希望服务器在用户之前进行验证,您确实可以编写类似的代码在客户端上进行验证。然后让服务器在每次尝试时完成所有工作会更有效率。 Html5 验证可能会有所帮助。 @automatix There are some modules for ZF2 可以帮助您在项目中集成客户端验证。我没有任何第一手经验,但可能值得一试。 这个问题不够精确。请查看更新。谢谢【参考方案2】:

由于我不知道您的应用程序/数据库的结构如何,我只能推测您可以创建另一个保存临时数据的表,或者在用户提交表单并对其进行验证后,而不是将其保存到 db make all字段只读,并将原始提交按钮替换为将保存数据的按钮和将用户带回到他/她可以更改数据的表单的按钮。

【讨论】:

以上是关于如何在 Zend Framework 2 中实现表单预览页面?的主要内容,如果未能解决你的问题,请参考以下文章

在具有 Alwayson 设置的 SQL Server 中实现表分区

如何安装zend framework 2.4.11骨架应用程序

如何使用Zend Framework 2使用Rest API

如何模拟 Zend\Form 提交而不在 Zend Framework 2/3 中显示表单?

如何在 composer 上使用 Zend Framework 2 的开发分支?

如何在 Zend Framework 2 中设置第一个应用程序