Symfony 3 - 静态CollectionType子项未显示

时间:2016-08-22 07:39:56

标签: php symfony symfony-forms

我正在使用Symfony 3.1.3中的表单,并希望使用CollectionType添加动态数量的复选框。在我的buildForm - 类的Type - 方法中,我使用此代码添加复选框:

    $builder->add('levels', CollectionType::class, array(
        'entry_type' => CheckboxType::class,
        'mapped' => false,
    ));

    foreach($levels as $level) {
        $name = 'level_cb_'.$level['name'];
        $builder->get('levels')->add($name, CheckboxType::class, array(
            'label' => $level['name'],
            'required' => false,
            'mapped' => false,
        ));
    }

如果我之后立即致电var_dump($builder->get('levels'));,则复选框会显示在children的{​​{1}}和unresolvedChildren属性中。稍后我在相关模板中调用了CollectionType,它向我显示{{ dump(form.levels) }}属性为空。

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:0)

因此,似乎系列的子项在我的自定义类型中添加和在Controller中可用的表单之间被清除。

我把代码添加到控制器中,突然一切都按预期工作。也许有人知道背后的原因。

所以在我的SpecialType.php中我只有:

    $builder->add('levels', CollectionType::class, array(
        'entry_type' => CheckboxType::class,
        'required' => false,
        'mapped' => false,
    ));

在我的SpecialFormController.php中,我有:

    $form = $this->createForm(SpecialType::class, $entity);
    foreach($levels as $level) {
        $name = 'level_cb_'.$level['name'];
        $form->get('levels')->add($name, CheckboxType::class, array(
            'label' => $level['name'],
            'required' => false,
            'mapped' => false,
        ));
    }