将用户 class 传递给 Symfony 4 表单
Pass user class to Symfony 4 form
我有包含此列的 StudentCourse 实体
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User\RegisteredUser", inversedBy="studentCourses")
* @ORM\JoinColumn(nullable=false)
*/
private $student;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Course\Course", inversedBy="studentCourses")
* @ORM\JoinColumn(nullable=false)
*/
private $course;
然后我有表格类型
namespace App\Form\StudentCourse;
use App\DataHolder\StudentCourse\StudentCourseNewDetails;
use App\Entity\Course\Course;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class NewStudentCourseType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('course', EntityType::class, [
'class' => Course::class,
'choice_label' => 'title'
])
->add('student', HiddenType::class, [
'data'=>$options['student']
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => StudentCourseNewDetails::class
]);
}
}
并在控制器中
$form = $this->createForm(NewStudentCourseType::class, $scnd, [
'student' => $user
]);
当我尝试显示这个错误时我得到
选项"student"不存在。定义的选项有:"action"、"allow_extra_fields"、"allow_file_upload"、"attr"、"attr_translation_parameters"、"auto_initialize"、"block_name"、"block_prefix", "by_reference", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_token_id", "csrf_token_manager", "data"、"data_class"、"disabled"、"empty_data"、"error_bubbling"、"error_mapping"、"extra_fields_message"、"help"、"help_attr", "help_html", "help_translation_parameters", "inherit_data", "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "label_translation_parameters", "mapped", "method", "post_max_size_message", "property_path", "required", "translation_domain", "trim", "upload_max_size_message", "validation_groups".
问题出在您的 configureOptions()
上。向其添加一个新索引 student
。
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => StudentCourseNewDetails::class,
'student' => null
]);
}
}
我有包含此列的 StudentCourse 实体
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User\RegisteredUser", inversedBy="studentCourses")
* @ORM\JoinColumn(nullable=false)
*/
private $student;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Course\Course", inversedBy="studentCourses")
* @ORM\JoinColumn(nullable=false)
*/
private $course;
然后我有表格类型
namespace App\Form\StudentCourse;
use App\DataHolder\StudentCourse\StudentCourseNewDetails;
use App\Entity\Course\Course;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class NewStudentCourseType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('course', EntityType::class, [
'class' => Course::class,
'choice_label' => 'title'
])
->add('student', HiddenType::class, [
'data'=>$options['student']
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => StudentCourseNewDetails::class
]);
}
}
并在控制器中
$form = $this->createForm(NewStudentCourseType::class, $scnd, [
'student' => $user
]);
当我尝试显示这个错误时我得到
选项"student"不存在。定义的选项有:"action"、"allow_extra_fields"、"allow_file_upload"、"attr"、"attr_translation_parameters"、"auto_initialize"、"block_name"、"block_prefix", "by_reference", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_token_id", "csrf_token_manager", "data"、"data_class"、"disabled"、"empty_data"、"error_bubbling"、"error_mapping"、"extra_fields_message"、"help"、"help_attr", "help_html", "help_translation_parameters", "inherit_data", "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "label_translation_parameters", "mapped", "method", "post_max_size_message", "property_path", "required", "translation_domain", "trim", "upload_max_size_message", "validation_groups".
问题出在您的 configureOptions()
上。向其添加一个新索引 student
。
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => StudentCourseNewDetails::class,
'student' => null
]);
}
}