Symfony形成,错误冒泡

时间:2012-05-03 20:56:43

标签: php symfony

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

$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 个答案:

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