Symfony形式,错误冒泡


Symfony forms, error bubbling

我有表单错误冒泡的问题。我的表单中的一个字段定义如下:

$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',
            ],
        ]);
    }