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 中获取字段名称。请记住,某些键涵盖多个字段(“namefirst_name 的组合必须是唯一的”)。

这就是为什么 Symfony 在表单层中添加验证的原因。在那里,您可以一次检查所有字段,并返回多个错误。但也许您已经这样做了,并且只想将其作为最终检查?

【讨论】:

我可以使用 Zend 检查表单层中的所有字段,但我仍然希望将 Propel 错误冒泡作为最终检查。理想情况下,我会将所有可能来自 Propel 的错误合并回 Zend 中的表单层,但现在我只想防止表单提交进入令人讨厌的 php 错误页面。我将不得不做一些研究来找出 Zend_Form 中唯一键约束错误的最佳方法。感谢您的帮助,

以上是关于Zend 框架中的表单级别验证的主要内容,如果未能解决你的问题,请参考以下文章

zend 框架子表单isValidPartial?

Zend 框架表单与 jquery

Zend框架中的登录和注销问题

检索 Zend 框架中的子表单元素?

自定义表单装饰器中的 Zend 框架类

设置 zend 框架动作控制器