如何为Symfony FormBuilder中的每个CollectionType条目设置不同的entry_options

时间:2019-01-08 17:16:40

标签: php symfony formbuilder symfony-2.8

我正在尝试使用HiddenType在Form Builder中创建多个CollectionType字段,以便在控制器中处理这些字段时对它们进行分组。但是我希望每个字段都具有不同的属性。是否可以使用entry_options为每个条目设置不同的选项?

我正在使用javascript拖放插件将元素拖放到容器中,当拖放这些元素时,JS代码会更新这些隐藏的字段,这些字段用于捕获控制器中的信息。因此,必须对这些字段进行某种组合,以便我可以在控制器中轻松处理它们。

一个例子:

$builder->add(self::FIELD_MAPPED_COLUMNS, CollectionType::class, [
    'entry_type'    => HiddenType::class,
    'data'          => ['field1', 'field2', 'field3'],
    'label'         => false,
    'entry_options' => [
        'attr' => [
            'data-my-field' => '?????'
        ]
    ]
])->add('submit', SubmitType::class);

我想为每个data-my-field设置一个不同的HiddenType,以便可以在Javascript中使用它。有可能吗?

1 个答案:

答案 0 :(得分:0)

我只是遇到了同样的问题。这是我的解决方法。

首先在entry_options中添加模板:

$builder->add(self::FIELD_MAPPED_COLUMNS, CollectionType::class, [
    'entry_type'    => HiddenType::class,
    'data'          => ['field1', 'field2', 'field3'],
    'label'         => false,
    'entry_options' => [
        'attr' => [
            'data-my-field' => '%templateForMyFieldByFieldData%'
        ]
    ]
])->add('submit', SubmitType::class);

然后在Twig循环中分别渲染集合的每个字段,并用所需的值替换模板:

...
{{ (form_widget(field) | replace('%templateForMyFieldByFieldData%', valueToInsert)) | raw }}
...

希望对某人有用!