3

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

$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)}}时,它不会打印我的错误。

我可以做些什么来更改错误的分配?

4

2 回答 2

5

仅当验证器附加到相应的属性时,消息才会附加到字段。您的验证器附加到该类的方法,因此错误确实是全局的。

你应该这样做:

use ...\TitleValidator as AssertTitleValid;

class MyEntity
{
    /**
     * @AssertTitleValid
     */
    private $title;
}

并创建您自己的 TitleValidator 类。

于 2012-05-04T08:55:00.333 回答
1

'error_bubbling' 是false默认的,除非它被设置为true或 form 是复合的。

此外,如果表单字段和已验证的属性/方法之间存在一些不匹配,例如您在示例中的情况,或者如果使用不同的大小写(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',
            ],
        ]);
    }
于 2019-12-18T08:39:08.597 回答