我正在使用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);
}
我希望这是有道理的,谢谢你的帮助,
戴夫
答案 0 :(得分:1)
您是在考虑数据库中的错误,还是来自Propel验证层(未开发那么多,默认情况下未在save()
步骤中使用)?
如果您想使用数据库错误,请记住它们只会返回第一个错误(因此如果用户输入了三个错误,则必须提交四次)。此外,从错误消息can be hard中获取字段名称。请注意,某些键会覆盖多个字段(“name
和first_name
的组合必须是唯一的”。
这就是为什么例如Symfony在表单层中添加验证的原因。在那里,您可以一次检查所有字段,并返回多个错误。但也许你已经这样做了,只想把它作为最后的检查?