【发布时间】:2010-09-30 09:56:04
【问题描述】:
所以问题是我在页面 A 中有一个表单,该表单正在页面 B 中提交。 在页面 B 验证表单后,它应该重定向回页面 A 并显示可能发生的错误的表单。
实现这一目标的最佳方法是什么?将整个表单对象临时放入会话中是否明智?还是有更优雅的解决方案?
【问题讨论】:
所以问题是我在页面 A 中有一个表单,该表单正在页面 B 中提交。 在页面 B 验证表单后,它应该重定向回页面 A 并显示可能发生的错误的表单。
实现这一目标的最佳方法是什么?将整个表单对象临时放入会话中是否明智?还是有更优雅的解决方案?
【问题讨论】:
为什么不在页面 A 上验证它,如果有效则转发到页面 B?这样你就不必做任何丑陋的黑客攻击了。
【讨论】:
正确的方法是将表单提交到同一页面,并且只有当它有效时,才通过Location: 标头重定向到下一页。
【讨论】:
在我看来,页面 A 是这里的罪魁祸首。
您可以在会话中保存页面 A 的 url,然后重定向到(唯一!)登录页面(页面 B,对吗?),而不是在用户未登录时在页面 A 上呈现登录表单,由 AuthController::loginAction() 之类的东西处理。
在验证失败时,您将他留在登录页面上,显示验证错误和表单。成功验证/登录后,您检查会话以查看那里是否有保存的 url。如果是这样,请把他送到那里。如果没有,请将他发送到您选择的某个位置,他的个人资料页面或主页或某种祝贺您已登录的页面。
明白我的意思吗?
【讨论】:
Zend_Form 有getMessages、getErrorMessages 和setErrors、setErrorMessages 等方法。您可以尝试这样做 - 从未尝试过,但理论上应该可行:
Errors 装饰器生成。【讨论】: