Symfony - 相同类型的多种形式

时间:2016-09-30 01:37:28

标签: php symfony

所以我开始学习Symfony。它看起来像一个非常棒的框架,但有些概念对我来说仍然模糊,所以请原谅我的问题,这对你们中的一些人来说可能是愚蠢的。

所以我想做的是创建一个页面,我的用户可以在同一页面中添加同一个实体的多个实例(假设为5),所以它有点像“在bash中添加项目”页面(有点像phpMyAdmin插入数据页面,你可以在一个页面中添加多行。

我已经从我的实体制作了FormType,当我想添加1个实体时,一切正常,但我不知道如何处理多个实体插入。

我尝试过使用FormCollection,没有任何成功(抱歉,我删除了我的代码,所以我无法显示我尝试过的内容......)。我也尝试用循环生成5种不同的形式,只改变它们的名字,但我不知道如何处理它们。

如果有人能指引我,那对你来说真的很棒!提前谢谢!

P.S我正在使用Symfony 3.1.4

2 个答案:

答案 0 :(得分:0)

根据您的要求,您的表格似乎并不大。所以,你应该使用AJAX。

加载单个表单但通过ajax处理提交,成功时,您的控制器应通过Warning:jcifs.http.NetworkExplorer: can't find referenced method 'java.util.Enumeration getInitParameterNames()' in program class jcifs.http.NetworkExplorer. 以另一个新表单回复。这样,用户不必填写所有表格,但可以获得更好的可用性。

希望它有所帮助!

答案 1 :(得分:0)

如果您将一个表单嵌套在另一个表单中,则可以根据需要添加任意数量的表单。因此,如果第一个表单创建一个实体...例如:

实体表格:

// src/AppBundle/Form/TaskType.php
namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class TaskType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')
            ->add('task');
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Task',
        ));
    }
}

允许添加多种表单的容器表单:

// src/AppBundle/Form/ProjectType.php
namespace AppBundle\Form;

use src/AppBundle/Form/TaskType.php
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;

class ProjectType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('tasks', CollectionType::class, array(
          'entry_type'   => TaskType::class,
          'allow_add'    => true // <- don't forgot this part :)
        ))
        ->add('save', SubmitType::class);
    }
}

您需要将容器表单连接到某些JavaScript,以便您可以动态添加更多实体表单。那是described in detail in this cookbook article。此外,公平警告:这是由一个沉睡,懒惰的大脑打字,未经测试,可能没有功能。但它应该让你走上正确的道路:D祝你好运!