使用 Symfony 2.2.4。
我有一个带有两个选择列表(多个,非扩展)的表单,显示相同的元素(类的实体)。当用户从两个选择列表中选择相同的元素时,我需要抛出错误(onsubmit)。有没有办法验证这个选择,不需要遍历两个列表来检查每个元素,你知道,就像自动/内置验证一样。
我需要捕获错误并将其绑定到选项列表之一,以允许我将其显示为任何其他错误,即通过 form_errors(form)。
任何提示表示赞赏。
使用 Symfony 2.2.4。
我有一个带有两个选择列表(多个,非扩展)的表单,显示相同的元素(类的实体)。当用户从两个选择列表中选择相同的元素时,我需要抛出错误(onsubmit)。有没有办法验证这个选择,不需要遍历两个列表来检查每个元素,你知道,就像自动/内置验证一样。
我需要捕获错误并将其绑定到选项列表之一,以允许我将其显示为任何其他错误,即通过 form_errors(form)。
任何提示表示赞赏。
最简单的方法是在AbstractType类的buildForm中添加一个监听器,这里举个例子
$builder->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) {
$form = $event->getForm();
$coll1 = $form['field1']->getData();
$coll2 = $form['field2']->getData();
$ids1 = $coll1->map(function($entity) { return $entity->getId(); })->toArray();
$ids2 = $coll1->map(function($entity) { return $entity->getId(); })->toArray();
$intersect = array_intersect($ids1, $ids2);
if (!empty($intersect)) {
$form['field1']->addError(
new FormError('here the error')
);
}
}
);
请注意,我没有测试集合的交集,但我希望意思清楚
另一种(有点难的)方法是创建自定义验证约束