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
,因此您使用的选项(class
、expanded
、multiple
、property
)不存在。
也不是说 property
已被弃用,您应该使用 choice_label/choice_value
除非您使用的是相当旧的 symfony 版本。
使用@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 回答帮我修正了错误
我有两个实体 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
,因此您使用的选项(class
、expanded
、multiple
、property
)不存在。
也不是说 property
已被弃用,您应该使用 choice_label/choice_value
除非您使用的是相当旧的 symfony 版本。
使用@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 回答帮我修正了错误