【问题标题】:Form Level Validation in Zend FrameworkZend 框架中的表单级别验证
【发布时间】: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);
}

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

戴夫

【问题讨论】:

    标签: php validation zend-framework orm propel


    【解决方案1】:

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

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

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

    【讨论】:

    • 我可以使用 Zend 检查表单层中的所有字段,但我仍然希望将 Propel 错误冒泡作为最终检查。理想情况下,我会将所有可能来自 Propel 的错误合并回 Zend 中的表单层,但现在我只想防止表单提交进入令人讨厌的 PHP 错误页面。我将不得不做一些研究来找出 Zend_Form 中唯一键约束错误的最佳方法。感谢您的帮助,
    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多