im正在为我的应用程序开发创建学生要求。我有我的学生实体,该实体包含两个属性:
- 用户
- (用户实体的实例) 课程
- (课程实体的实例)
我构建了表单,但我希望通过单击按钮呈现相同的表单。这样,管理员可以在不刷新页面的情况下添加任何学生。
这可能吗?如何在控制器上管理提交?
有什么想法吗?谢谢
注意:我在添加新记录时搜索类似的 Phpmyadmin 行为。
您应该做的是创建一个新的对象和表单(例如 StudentCollection),允许使用 collection
类型添加学生表单。这将使您能够更好地管理动态添加/删除学生表单。
有关表单集合的更多信息,请单击此处 http://symfony.com/doc/current/cookbook/form/form_collections.html
例如,假设你有一个名为StudentFormType的学生表单,这样的东西应该可以工作。上面的链接上有一个很好的例子,如果你想知道如何动态添加/删除学生表格以及处理提交,你应该使用它。
// src/PathTo/YourBundle/Form/Type/StudentCollectionFormType.php
// Form object
class StudentCollectionFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('students', 'collection', array(
'type' => new StudentFormType(),
'allow_add' => true,
'allow_delete' => true,
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'PathToYourBundleModelStudentCollection',
));
}
// ...
}
// src/PathTo/YourBundle/Model/StudentCollection.php
namespace PathToYourBundleModel;
// ...
class StudentCollection
{
// ...
protected $students;
public function __construct()
{
$this->students = new DoctrineCommonCollectionsArrayCollection();
}
public function getStudents()
{
return $this->students;
}
public function addStudent(Student $student)
{
$this->students->add($student);
}
public function removeStudent(Student $student)
{
$this->students->removeElement($student);
}
}
然后在您的控制器中
// src/PathTo/YourBundle/Controller/StudentController.php
public function editAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$collection = new StudentCollection();
// Prepopulate the collection with students
// ...
$form = $this->createForm(new StudentCollectionFormType(), $collection);
$form->handleRequest($request);
if ($form->isValid()) {
foreach ($collection->getStudents() as $student) {
$em->persist($student);
}
$em->flush();
// redirect back to some edit page
// ...
}
// render some form template
// ...
}