我的表格有问题'冒泡冒泡。 我的表单中的一个字段定义如下:
$formBuilder->add('title','text',
'required' => true,
'error_bubbling' => false,
)
)
我想在此字段中添加这样的验证器:
/**
* @Assert\True(message = "Bad title.")
*/
public function getTitleCorrect()
{
/* ... */
return false;
}
它运行正常,但错误消息显示在表单顶部,而不是字段行。
在Twig模板中,此错误消息由{{form_errors(form)}}
呈现为全局错误。当我使用{{form_errors(form.title)}}
时,它不会打印我的错误。
如何更改错误分配?
答案 0 :(得分:5)
仅当验证程序附加到相应的属性时,才会将消息附加到字段。 您的验证器附加到类的方法,因此错误确实是全局的。
你应该这样:
use ...\TitleValidator as AssertTitleValid;
class MyEntity
{
/**
* @AssertTitleValid
*/
private $title;
}
创建自己的TitleValidator类。
答案 1 :(得分:0)
默认情况下,'error_bubbling'为false
,除非将其设置为true
或形式为复合形式。
如果表单字段和经过验证的属性/方法之间存在某些不匹配(例如您在示例中,或者使用了不同的情况,则错误可能会冒出来)(snake_case
用于表单字段,$camelCase
验证的属性)。
在这种情况下,您可以在表单类中使用“ error_mapping”:
/**
* @param OptionsResolver $resolver
*
* @throws AccessException
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => YourEntity::class,
'error_mapping' => [
'entityProperty' => 'form_field_1',
'entityMethod' => 'form_field_2',
],
]);
}