Symfony CollectionType字段,带有一个默认字段

时间:2017-08-21 13:01:02

标签: php forms symfony symfony-forms

我需要您对CollectionType字段的建议。

我使用以下方法制作了我的收藏类型字段:Symfony CollectionType Field
一切正常。即使使用JQuery动态添加字段也能正常工作。

但是有一个问题。

每次收集字段渲染时,我都无法找到如何添加一个字段。我的页面加载后,我的收集字段为空。但是,我想在每次加载页面后从集合中获取第一个字段。

如何实现这一目标?我应该使用Javascript还是某种形式的活动?任何有关在文档或代码片段中找到正确章节的提示都将非常受欢迎。

3 个答案:

答案 0 :(得分:1)

我想我记得这样做了,我最后在第一次加载时创建了一个空子的数据。

我无法对此进行测试,但我认为以下内容应根据您的表单细节而有效。

public function someAction()
{
    $data = [];
    $data['collection_name'][] = ['text' => ''];

    $form = $this->createForm(SomeType::class, $data);

    return $this->templating->renderResponse('template.twig.html', [
        'form' => $form,
    ]);
}

'required' => false,添加到集合的表单配置中应该可以防止空项持久存在。

您还可以在表单Type class上调查configureOptions方法:

public function configureOptions(OptionsResolver $resolver)
{
    $data = [];
    $data['collection_name'][] = ['text' => ''];
    $resolver->setDefaults(array(
        'empty_data' => $data,
    ));
}

答案 1 :(得分:0)

这种方式对我有用。

// 3 default values for empty form
$configArr = [[], [], []];

if ($builder->getData()) {
    $configArr = $builder->getData()->getColumns();
}

$builder->add('columns', CollectionType::class, [
    'entry_type' => ColumnType::class,
    'prototype' => true,
    'allow_add' => true,
    'allow_delete' => true,
    'data' => $configArr,
    'mapped' => false,
]);

答案 2 :(得分:0)

这对我很有效。

public function buildForm(FormBuilderInterface $builder, array $options) {
    $data = $builder->getData(); // data passed to the form
    $builder->add('textFields', CollectionType::class, [
        'entry_type' => TextType::class,
        'data' => $data ? $data->getTextFields() : ['']
    ]);
}