1

我正在使用 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);
}

我希望这是有道理的,谢谢你的帮助,

戴夫

4

1 回答 1

1

您是在考虑来自数据库的错误,还是来自 Propel 验证层(开发得不多,并且在该save()步骤中默认不使用)的错误?

如果要使用数据库错误,请记住它们只会返回第一个错误(因此如果输入三个错误,用户必须提交四次)。此外,从错误消息中获取字段名称可能很困难。请记住,某些键涵盖多个字段(“和的组合name必须first_name是唯一的”)。

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

于 2010-02-02T06:54:28.290 回答