Zend 框架中的表单级别验证
Posted
技术标签:
【中文标题】Zend 框架中的表单级别验证【英文标题】:Form Level Validation in Zend Framework 【发布时间】:2010-02-01 22:10:46 【问题描述】:我正在使用 Zend MVC 框架以及使用 Propel 生成的 ORM 层,并且我正在尝试找出从 Propel 对象的 save() 函数中捕获异常的最佳方法,并将它们作为错误。
并非所有来自 Propel 对象的异常都有办法识别哪个字段导致错误,所以我想知道是否有办法将通用错误消息添加到整个表单,而不是被强制将每条错误消息附加到特定的表单元素。
例如,我有一个包含在 try/catch 块中的 save() 调用,我可以将 exception->getMessage() 添加到表单元素的错误中:
try
$obj->save();
echo 'object saved successfully';
catch (Exception $e)
$form->name->addErrorMessage($e->getCode()." - ".$e->getMessage());
$form->name->markAsError();
$form->populate($formData);
但我希望能够做这样的事情:
try
$obj->save();
echo 'object saved successfully';
catch (Exception $e)
$form->addErrorMessage($e->getCode()." - ".$e->getMessage());
$form->markAsError();
$form->populate($formData);
我希望这是有道理的,谢谢你的帮助,
戴夫
【问题讨论】:
【参考方案1】:您是在考虑来自数据库的错误,还是来自 Propel 验证层(开发得不多,默认情况下不会在 save()
步骤中使用)?
如果您想使用数据库错误,请记住它们只会返回第一个错误(因此如果输入三个错误,用户必须提交四次)。此外,从错误消息can be hard 中获取字段名称。请记住,某些键涵盖多个字段(“name
和 first_name
的组合必须是唯一的”)。
这就是为什么 Symfony 在表单层中添加验证的原因。在那里,您可以一次检查所有字段,并返回多个错误。但也许您已经这样做了,并且只想将其作为最终检查?
【讨论】:
我可以使用 Zend 检查表单层中的所有字段,但我仍然希望将 Propel 错误冒泡作为最终检查。理想情况下,我会将所有可能来自 Propel 的错误合并回 Zend 中的表单层,但现在我只想防止表单提交进入令人讨厌的 php 错误页面。我将不得不做一些研究来找出 Zend_Form 中唯一键约束错误的最佳方法。感谢您的帮助,以上是关于Zend 框架中的表单级别验证的主要内容,如果未能解决你的问题,请参考以下文章