Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony表单,冒泡错误_Php_Symfony - Fatal编程技术网

Php Symfony表单,冒泡错误

Php Symfony表单,冒泡错误,php,symfony,Php,Symfony,我有一个表单错误冒泡的问题。 我表单中的一个字段定义如下: $formBuilder->add('title','text', 'required' => true, 'error_bubbling' => false, ) ) 我想在此字段中添加一个如下验证程序: /** * @Assert\True(message = "Bad title.") */ public function getTitleCorrect() { /* ..

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

$formBuilder->add('title','text',
   'required'  => true, 
   'error_bubbling' => false,
   )
)
我想在此字段中添加一个如下验证程序:

/**
  * @Assert\True(message = "Bad title.")
  */
public function getTitleCorrect()
{
    /* ... */     
    return false;
} 
它工作正常,但错误消息显示在窗体顶部,而不是字段行中

在细枝模板中,此错误消息由
{{form_errors(form)}}
作为全局错误呈现。当我使用
{{form_errors(form.title)}}
时,它不会打印我的错误


如何更改错误的分配?

只有当验证程序附加到相应的属性时,消息才会附加到字段。 您的验证器附加到类的一个方法,所以错误确实是全局的

你应该这样做:

use ...\TitleValidator as AssertTitleValid;

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

并创建自己的TitleValidator类。

默认情况下,“错误冒泡”为
false
,除非设置为
true
或表单为复合

此外,如果表单字段和已验证属性/方法之间存在一些不匹配的情况(如示例中所示),或者如果使用不同的大小写(
snake\u case
用于表单字段,而
$camelCase
用于已验证属性),则可能会出现错误

在这种情况下,您可以在表单类中使用“错误映射”:

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