我有表单错误冒泡的问题。我的表单中的一个字段定义如下:
$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)}}
时,它不会打印我的错误。
如何更改错误的分配?
仅当验证程序附加到相应的属性时,消息才会附加到字段。您的验证器附加到类的方法,因此错误确实是全局的。
你应该做这样的事情:
use ...'TitleValidator as AssertTitleValid;
class MyEntity
{
/**
* @AssertTitleValid
*/
private $title;
}
并创建您自己的 TitleValidator 类。
默认情况下
false
"error_bubbling",除非它设置为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',
],
]);
}