我有一个实体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中显示的消息?