Zend framework 重定向后持久化Zend表单对象

Zend framework 重定向后持久化Zend表单对象,zend-framework,zend-form,Zend Framework,Zend Form,所以问题是我在a页有一个表格,在B页提交。 在B页验证表单后,它应该重定向回A页,并显示包含可能发生的错误的表单 实现这一目标的最佳方式是什么?在会话中临时放置整个表单对象是否明智?或者有更优雅的解决方案吗?正确的方法是将表单提交到同一页,只有在表单有效的情况下,才能通过位置:标题重定向到下一页。正确的方法是将表单提交到同一页,只有在有效的情况下,您才能通过位置:标题重定向到下一页。为什么不在a页验证它,然后在有效的情况下转发到B页?这样,您就不必进行任何丑陋的黑客攻击。为什么不在A页上验证它,

所以问题是我在a页有一个表格,在B页提交。 在B页验证表单后,它应该重定向回A页,并显示包含可能发生的错误的表单


实现这一目标的最佳方式是什么?在会话中临时放置整个表单对象是否明智?或者有更优雅的解决方案吗?

正确的方法是将表单提交到同一页,只有在表单有效的情况下,才能通过
位置:
标题重定向到下一页。

正确的方法是将表单提交到同一页,只有在有效的情况下,您才能通过
位置:
标题重定向到下一页。

为什么不在a页验证它,然后在有效的情况下转发到B页?这样,您就不必进行任何丑陋的黑客攻击。

为什么不在A页上验证它,然后在有效的情况下转发到B页?这样你就不必做任何难看的黑客了。

我觉得A页是罪魁祸首

用户未登录时,您可以在会话中保存页面A的url,然后重定向到(唯一的!)登录页面(页面B,对吗?),而不是在页面A上呈现登录表单,由类似
AuthController::loginAction()
的程序处理

在验证失败时,您将他保留在登录页面上,显示验证错误和表单。验证/登录成功后,您将检查会话以查看是否有保存的url。如果是这样,就把他送到那里去。如果没有,把他送到你选择的某个地方,或者他的个人资料页面,或者主页,或者某种祝贺你登录的页面


明白我的意思了吗?

我觉得这里的罪魁祸首好像是A页

用户未登录时,您可以在会话中保存页面A的url,然后重定向到(唯一的!)登录页面(页面B,对吗?),而不是在页面A上呈现登录表单,由类似
AuthController::loginAction()
的程序处理

在验证失败时,您将他保留在登录页面上,显示验证错误和表单。验证/登录成功后,您将检查会话以查看是否有保存的url。如果是这样,就把他送到那里去。如果没有,把他送到你选择的某个地方,或者他的个人资料页面,或者主页,或者某种祝贺你登录的页面


明白我的意思了吗?

Zend\u Form
有一些方法,比如
getMessages
getErrorMessages
setErrors
setErrorMessages
等等。你可以尝试这样做——从未尝试过,但理论上应该是可行的:

  • 在验证失败后的第B页上,将验证消息存储在会话中
  • 重定向到A页
  • 在呈现窗体之前,请检查会话中是否有消息,如果有,请将其设置为窗体
  • 呈现形式-如果设置了消息,它们将由
    Errors
    decorator生成

  • Zend_Form
    具有类似于
    getMessages
    getErrorMessages
    setErrors
    setErrorMessages
    等方法。你可以尝试这样做——从未尝试过,但理论上应该是可行的:

  • 在验证失败后的第B页上,将验证消息存储在会话中
  • 重定向到A页
  • 在呈现窗体之前,请检查会话中是否有消息,如果有,请将其设置为窗体
  • 呈现形式-如果设置了消息,它们将由
    Errors
    decorator生成

  • 页面A包含未登录时不可用的功能,因此登录表单嵌入在该页面上。但是,该表单的实际验证在B页上进行。在我看来,有两个操作处理同一个表单似乎有点错误。页面A是一个包含未登录时不可用的功能的页面,因此登录表单嵌入在该页面上。但是,该表单的实际验证在B页上进行。在我看来,有两个操作处理同一个表单似乎有点错误。我知道你的意思,但如果验证失败,我真的不希望用户离开该页面。用户可能不理解。这是一个非常常见的工作流:“对不起,首先需要登录。”然后重定向到登录页面;我想用户会理解的。但是,如果您必须在页面A上显示表单,即使验证失败,那么我认为您仍然坚持您已经提到的方法。但我觉得它们都有点笨重,需要对会话变量或表单处理进行控制器检查。如果您在两个操作中进行表单处理,那么您至少可以使用一个操作助手来保留该代码。如果您真的想在两个不同的控制器中处理处理,以便让他保持在发布表单的页面上,那么至少要将表单处理提取到一个新的控件中。这样,您至少可以保持表单处理。我知道你的意思,但如果验证失败,我真的不希望用户离开该页面。用户可能不理解。这是一个非常常见的工作流:“对不起,首先需要登录。”然后重定向到登录页面;我想用户会理解的。但是,如果您必须在页面A上显示表单,即使验证失败,那么我认为您仍然坚持您已经提到的方法。但我觉得它们都有点笨重,需要对会话变量或表单处理进行控制器检查。如果您在两个操作中进行表单处理,那么您至少可以使用一个操作助手来保留该代码。如果您真的想在两个不同的控制器中处理处理,以便让他保持在发布表单的页面上,那么至少要将表单处理提取到一个新的控件中。这样,您至少可以保持表单处理。看见