从Symfony自定义验证器抛出全局错误的优雅方法?

时间:2012-04-19 00:54:04

标签: php forms symfony1 validation

我正在使用Symfony 1.4来允许用户导入各种类型的CSV文件,我决定将上传文件的实际内容的验证和清理整合到自定义验证器中 - 自定义验证器会扩展sfValidatorFile。 / p>

此外,当文件包含错误时,我想在表单上抛出全局错误,而不是将它们显示为字段/本地错误 - 并且 - 能够在给定导入的同时显示许多验证错误文件。

我很确定我可以通过使用Post Validator来完成这项工作,但这似乎不适合Post Validator(因为我真的只需要知道一个表单字段才能执行我的自定义验证),但更重要的是,我想要一些更优雅的东西,将所有额外的验证工作打包到一个自定义文件验证器中。

例如,而不是:

$this->validatorSchema['file'] = new sfValidatorFile( … );
$this->validatorSchema->setPostValidator(new myFancyValidator( … ));

我只想做类似的事情:

$this->validatorSchema['file'] = new myFancyValidator( … );

...并将myFancyValidator中遇到的验证错误添加到表单的全局错误集合中。

我尝试了一些不同的方法将错误从我的自定义验证器中推送到表单的globalErrors上,但我遗漏了一些关于验证难题的各个部分如何适合/范围的东西。有关如何实现这一点的任何想法?依赖注入?

1 个答案:

答案 0 :(得分:0)

在自定义验证程序中抛出sfValidatorError对象,例如:

if(!$isValid){
    // throw global error
    throw new sfValidatorError($this, "invalid");
}
else {
    return true;
}