Symfony2 - 自定义表单呈现验证错误

时间:2014-10-22 10:17:06

标签: forms validation symfony jquery-select2

我正在尝试将select2用于我的symfony2 entity fields

我为它创建了实体字段的扩展,树枝模板和模型变换器。渲染工作正常,但我提交字段时遇到问题。

使用原始格式,值的发送方式如下:

Content-Disposition: form-data; name="com_bundle_book[series]"  1 

对于具有多个s的实体

Content-Disposition: form-data; name="com_bundle_book[author][]" 1
Content-Disposition: form-data; name="com_bundle_book[author][]" 3

select2&#39>的行为是用隐藏字段替换现有字段。发送的数据如下所示:

Content-Disposition: form-data; name="com_bundle_book[series]" TraLiRo 
Content-Disposition: form-data; name="com_bundle_book[author][]" Ferdinand,Hans

我希望用modelTransformer对它进行排序,但是我从而在从不调用modelTransformer的情况下得到两个字段的错误(无效值)。

我尝试了实体的扩展和扩展实体本身。我的服务:

com_bundle.tag_type_extension:
    class: ...\Form\Extension\TagTypeExtension
    tags:
        - { name: form.type_extension, alias: entity }
    arguments: [@doctrine.orm.entity_manager]
com_bundle.form.type.tagType_entity:
    class: ...\Form\Extension\TagTypeExtension2
    tags:
        - { name: form.type, alias: tagType_entity }
    arguments: [@doctrine.orm.entity_manager]

课程:

我该如何解决这个问题?

更新

表单构建如下:

   $builder
        ->add('author',
            'entity',
            array(
                'select2' => true,
                'multiple' => true,
                'class' => 'Bundle:Author',
                'property' => 'name'
            )
        )

1 个答案:

答案 0 :(得分:1)

您的Transformer不应返回对象,而应返回对象ID,因为默认实体ModelTransformer仍然适用,并会将这些ID转换为对象。

Doctrine实体模型变换器适用于您之前的实体,这就是您永远无法达到它的原因。将它添加为ViewTransformer,如下所示:

$builder->addViewTransformer(
    new ObjectListToStringTransformer(
        $this->em,
        [
            'class' => $options['class'],
            'property' => $options['property'],
            'delimiter' => ','
        ]
    ), true
);

我添加了一个TRUE作为addViewTransformer =>的第二个参数。与父字段类型定义的其他变换器相比,它会强制您的变换器前置。

编辑:这样您就必须调整Transformer transform()方法,因为它现在会收到ID数组而不是对象数组...