2010-02-01 40 views
1

我使用Zend MVC框架以及用Propel生成的ORM图层,我试图找出从Propel对象的save()函数中捕获异常的最佳方法,并抛出他们以Zend表格作为错误。Zend框架中的表单级别验证

并非所有来自Propel对象的异常都有一种方法来确定哪个字段导致错误,所以我想知道是否有一种方法可以将通用错误消息添加到整个表单中,而不是被迫将每个错误消息附加到特定的表单元素。

例如,我有一个保存()调用包装在try/catch块,我可以添加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在表单层添加验证的原因。在那里,您可以一次检查所有字段,并返回多个错误。但是,也许你已经这样做了,只想把它作为最终检查?

+0

我可以使用Zend检查表单图层中的所有字段,但是我仍然想要将Propel错误作为最终检查进行冒泡。理想情况下,我将把可能从Propel返回的所有可能的错误合并到Zend中的表单层中,但现在我只想阻止表单提交到一个讨厌的PHP错误页面。 我将不得不做一些研究,找出在Zend_Form中唯一的关键约束错误的最佳方法。谢谢你的帮助, – 2010-02-02 15:00:17