我有一个没有实体的表单,我喜欢用CallBack约束验证它。但是错误是在表单的根目录而不是表单元素上设置。
我的表格的一部分:
$builder
->add('judgmentPeriod', DatesPeriod::class, [
'constraints' => new Callback(array(
'callback' => [$this, 'datesAreEmpty'],
'groups' => ['insertionPeriod']))
])
->add('insertionPeriod', DatesPeriod::class, [
'constraints' => new Callback(array(
'callback' => [$this, 'datesAreEmpty'],
'groups' => ['judgmentPeriod']))
])
;
DatesPeriod包含2个DateTime子表单。
我的回调函数:
public function datesAreEmpty($data, ExecutionContextInterface $context)
{
if(isset($data['end']) && $data['end'] != null || isset($data['start']) && $data['start'] != null) {
$context
->buildViolation('error.dates_period.not_empty')
->atPath('[insertionPeriod]')
->addViolation()
;
}
}
问题是error.dates_period.not_empty
消息显示在表单顶部而不是insertPeriod元素上。
我真的不知道如何使用atPath方法,但我认为我没有提供正确的参数。
感谢。
[编辑] 我找到了解决方案,我不得不将error_bubbling强制为false。