如何验证相关实体仍然存在于数据库中,表单提交?

时间:2016-12-01 15:05:32

标签: database validation symfony symfony-forms

我有一个实体Activity,在我的应用的一部分有一个CRUD。 在应用的另一部分中,我有一个表示UserData实体的表单,与@ManyToOne的关系Activity

提交此表单时,我想验证所选的Activity是否仍然存在于数据库中(因为CRUD,可以在表单加载和表单提交之间删除它。)

我在symfony核心文件中挖了很多东西,发现这个验证是在viewToNorm()方法的Form组件中完成的,它抛出一个TransformationFailedException,然后由submit()沉默方法:

public function submit($submittedData, $clearMissing = true)
{
    try {
        [...]

        // Normalize data to unified representation
        $normData = $this->viewToNorm($viewData);

        [...]
    } catch (TransformationFailedException $e) {
        $this->transformationFailure = $e;

        // If $viewData was not yet set, set it to $submittedData so that
        // the erroneous data is accessible on the form.
        // Forms that inherit data never set any data, because the getters
        // forward to the parent form's getters anyway.
        if (null === $viewData && !$this->config->getInheritData()) {
            $viewData = $submittedData;
        }
    }
}

我尝试使用自定义验证程序构建自定义约束,但它不起作用,因为在转换失败的情况下,Symfony会将数据重置为其原始表单值,因此我的验证程序会收到NULL值而不是已删除的实体。

我可以构建DataTransformer并手动捕获此异常,但DataTransformer并不意味着执行验证。

有没有其他方法可以检查数据库中是否仍存在关系,最后自定义FormError中显示的消息?

0 个答案:

没有答案