Zend Framework中的表单级别验证

时间:2010-02-01 22:10:47

标签: php validation zend-framework orm propel

我正在使用Zend MVC框架以及使用Propel生成的ORM层,我正在尝试找出从Propel对象的save()函数中捕获异常的最佳方法,并将它们抛出到Zend Form中错误。

并非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 个答案:

答案 0 :(得分:1)

您是在考虑数据库中的错误,还是来自Propel验证层(未开发那么多,默认情况下未在save()步骤中使用)?

如果您想使用数据库错误,请记住它们只会返回第一个错误(因此如果用户输入了三个错误,则必须提交四次)。此外,从错误消息can be hard中获取字段名称。请注意,某些键会覆盖多个字段(“namefirst_name的组合必须是唯一的”。

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