symfony 3 UndefinedOptionsException - 从数据库下拉

symfony 3 UndefinedOptionsException - Dropdown from Database

我有两个实体 Student,我想创建一个显示学生详细信息和下拉列表的表单/ classes 的选择列表并分配一个 class 给学生。另外 classes 应该来自数据库 table 所以控制器是这样的。

public function studentAddClassAction( $id, Request $request )
{
    // get the student from the student table
    $em     = $this->getDoctrine()->getManager();
    $student= $em->getRepository('PIE10Bundle:Student')->find($id);

    // new class object and create the form
    $class  = new Classes;
    $form   = $this->createForm(ClassesType::class, $class);
    $form->handleRequest($request);

    if( $form->isSubmitted() && $form->isValid() )
    {
        // form operation - update student row with the classID
    }

    return $this->render(
                        'PIE10Bundle:student:layout_student_addclass.html.twig',
                        array(
                            'student'=> $student,
                            'title'  => 'Add Class',
                            'tables' => 1,
                            'form'   => $form->createView()
                        )
    );
}

我的类类型如下

class ClassesType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('classes',
                      ClassesType::class,
                      array(
                            'class'     => 'PIE10Bundle:Classes',
                            'property'  => 'className',
                            'expanded'  => false,
                            'multiple'  => false
                    ));
        $builder->add('Add Class',
                      SubmitType::class,
                      array('attr'  =>  array('class' => 'btn btn-primary',
                                              'style' => 'margin:15px 0;')) );
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'PIE10Bundle\Entity\Classes',

        ));
    }
}

当我尝试访问此表单时,我收到以下 500 内部服务器错误 - UndefinedOptionsException 错误

The options "class", "expanded", "multiple", "property" do not exist. Defined options are: "action", "allow_extra_fields", "attr", "auto_initialize", "block_name", "by_reference", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_token_id", "csrf_token_manager", "data", "data_class", "description", "disabled", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "inherit_data", "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "mapped", "method", "post_max_size_message", "property_path", "required", "translation_domain", "trim", "validation_groups".

所以我需要知道出了什么问题以及如何解决这个问题。如果需要任何其他信息,请告诉我。谢谢

ClassesType中更改:

$builder->add('classes', ClassesType::class, ...

至:

$builder->add('classes', EntityType::class, ...

另加:

use Symfony\Bridge\Doctrine\Form\Type\EntityType;

在您文件的顶部,以便它可用。


目前您正在使用 ClassesType 本身(如果不是因为错误,这可能会导致无限循环)。此类型不扩展 EntityType,因此您使用的选项(classexpandedmultipleproperty)不存在。

也不是说 property 已被弃用,您应该使用 choice_label/choice_value 除非您使用的是相当旧的 symfony 版本。


参考:EntityType Field

使用@Yoshi 回答我改变了

$builder->add('classes', ClassesType::class, ...

$builder->add('classes', EntityType::class, ...

并且还添加了

use Symfony\Bridge\Doctrine\Form\Type\EntityType;ClassesType 文件,然后像下面这样更新 Controller

public function studentAddClassAction( $id, Request $request )
{
    // get the student from the student table
    $em     = $this->getDoctrine()->getManager();
    $student= $em->getRepository('PIE10Bundle:Student')->find($id);

    // new class object and create the form
    $class  = $em->getRepository('PIE10Bundle:Classes')->findAll();
    $form   = $this->createForm(ClassesType::class, $class);
    $form->handleRequest($request);

    if( $form->isSubmitted() && $form->isValid() )
    {
        // form operation - update student row with the classID
    }

    return $this->render(
                        'PIE10Bundle:student:layout_student_addclass.html.twig',
                        array(
                            'student'=> $student,
                            'title'  => 'Add Class',
                            'tables' => 1,
                            'form'   => $form->createView()
                        )
    );
}

然后 ClassesType 如下

class ClassesType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('classes',
                      EntityType::class,
                      array(
                            'class'     => 'PIE10Bundle:Classes',
                            'expanded'  => false,
                            'multiple'  => false
                    ));
        $builder->add('Add Class',
                      SubmitType::class,
                      array('attr'  =>  array('class' => 'btn btn-primary',
                                              'style' => 'margin:15px 0;')) );
    }
}

@Yoshi 回答帮我修正了错误