Symfony表单,错误冒泡

4

我在表单的错误冒泡方面遇到了问题。 我的一个表单字段定义如下:

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

我该怎么做才能改变错误的分配?

2个回答

5

只有当校验器附加到相应的属性时,消息才会附加到该字段。由于您的校验器附加到类的方法上,因此错误实际上是全局的。

您应该像这样做:

use ...\TitleValidator as AssertTitleValid;

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

并创建你自己的TitleValidator类。


4

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接