如何多次呈现表单



im正在为我的应用程序开发创建学生要求。我有我的学生实体,该实体包含两个属性:

    用户
  1. (用户实体的实例)
  2. 课程
  3. (课程实体的实例)

我构建了表单,但我希望通过单击按钮呈现相同的表单。这样,管理员可以在不刷新页面的情况下添加任何学生。

这可能吗?如何在控制器上管理提交?

有什么想法吗?谢谢

注意:我在添加新记录时搜索类似的 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
    // ...
}

相关内容

  • 没有找到相关文章

最新更新