Symfony 2表单,带有选择列表

Dan*_*nau 9 php forms select doctrine symfony

如何使用Symfony 2中的数据库表创建包含值的选择列表?

我有2个实体:StudentClassroom,具有ManyToOne关系,我需要创建一个包含以下字段的表单:姓名,姓氏,年龄,教室(从可用班级中选择列表).

在我的学生表格中我有

    $builder
        ->add('name')
        ->add('surname')
        ->add('age')
        ->add('classroom', new ClassroomType())
    ;
Run Code Online (Sandbox Code Playgroud)

在我的课堂表格中我有这个:

    $classrooms =$this->getDoctrine()->getRepository('UdoCatalogBundle:Classroom')->findAll();
    $builder
        ->add('clasa','choice',array('choices' => array($classrooms->getId() => $classrooms->getName())));
Run Code Online (Sandbox Code Playgroud)

我得到以下错误:

Fatal error: Call to undefined method Udo\CatalogBundle\Form\ClassroomType::getDoctrine() in /var/www/html/pos/src/Udo/CatalogBundle/Form/ClassroomType.php on line 13         
Run Code Online (Sandbox Code Playgroud)

亲切的问候,Cearnau Dan

orn*_*rnj 24

不确定你是否找到了答案,但我只是需要做一些挖掘来解决我自己的项目.

表单类未设置为像控制器一样使用Doctrine,因此您无法以相同的方式引用Entity.您要做的是使用实体字段类型,这是一种特殊的选择字段类型,允许您在尝试时从Doctrine实体加载选项.

好长话短说.而不是做你正在做的事情来创建选择字段,这样做:

->add('category', 'entity', array(
    'class' => 'VendorWhateverBundle:Category',
    'query_builder' => function($repository) { return $repository->createQueryBuilder('p')->orderBy('p.id', 'ASC'); },
    'property' => 'name',
))
Run Code Online (Sandbox Code Playgroud)

我不确定你是否可以将query_builder函数放入存储库或者什么,我随便走得很疯狂.到目前为止,我上面链接的文档非常清楚要做什么.我想下一步是阅读Doctrine的QueryBuilder.

当你在那里时,我想你想要在你嵌入课堂表格的地方放弃一下,

->add('classroom', new ClassroomType())
Run Code Online (Sandbox Code Playgroud)

您可能不希望人们创建自己的教室.除非你这样做,那么是的.