在表单中的空集合字段类型

时间:2014-01-09 20:14:16

标签: forms symfony collections

我已经定义了一个只有一个'集合'类型字段的表单:

<?php
namespace GMC\AccesoSistemaBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use GMC\AccesoSistemaBundle\Form\FuncionType;

class FuncionesType Extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options) {

        $builder
                ->add('funciones', 'collection', array(
                    'type' => new FuncionType(),
                    'allow_add' => true,
                    'allow_delete' => true,
                    'by_reference' => false));
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver) {

        $resolver->setDefaults(array(
            'data_class' => null
        ));
    }

    public function getName() {

        return 'gmc_accesosistemabundle_funcionestype';
    }

然后我在我的控制器中创建一个表单:

public function mostrarFuncionesAction() {
    $em = $this->getDoctrine()->getManager();
    $funciones = $em->getRepository('AccesoSistemaBundle:Funcion')->findAll();
    $formulario = $this->createForm(new FuncionesType(), $funciones);
    return $this->render(
            'AccesoSistemaBundle:Default:funciones.html.twig',
            array('formulario' => $formulario->createView())
            );
}

但即使$ funciones有两条记录,表格的'funciones'集合也是空的,为什么呢?我错过了什么吗?

如你所见,我是Symfony2的新手,请耐心等待。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

Symfony对您当前的代码所做的是:

  • 获取$ functiones对象(Function类的实例)
  • 在Function class
  • 中查找名为functiones的属性
  • 使用此属性中的数据为您的表单添加水分

如果要使用实体mappin,则必须将表单字段(使用$builder->add('<name_here>'))命名为Function类的属性,该属性是Function的集合。

否则,您可以尝试用阵列水合表格,并给出:

$formulario = $this->createForm(new FuncionesType(), array('functiones' => $funciones));