在Symfony 2中创建一个表单网格

我正在一个页面上工作,我想用phpMyAdmin来实例化一个实体的实例。

更具体地说,我想获得一个表,其中列是实体的字段,行是这个实体的所有实例,并且使所有值(id除外)都可编辑,并将它们保存到数据库中。

我的问题是我真的不知道什么是一个很好的做法,Symfony有什么可能(我对这个框架很陌生)。

  • 我的第一个想法是创建一个单一的形式,但似乎很难将几个实例组合成一个单一的形式。

  • 我还考虑每行创建一个表单,但这意味着每行都有自己的“提交”字段,并且不可能一次将更改保存在多行中。

  • 在Symfony的文档中,我已经看到了关于表单集合的主题,但我不知道这是否可以使用,因为我的实体实例完全是独立的。

  • 那么,我认为我不是第一个想这样做的人,但我无法找到任何方法去做,也许我错过了什么?

    欢迎任何建议,谢谢!


    做“àlàsymfony”你可以创建一个Base Form,例如AllRowsType有一个Type集合的字段,每一行都是Type RowType:

    public function buildForm(FormBuilderInterface $builder, array $options)
        {
    
            $builder               
                ->add('rows', 'collection', array(
                    'type'   => new RowType(),
                    'allow_add' => false,
                    'allow_delete' => false,
                    'by_reference' => false
                 ));
        }
    

    那么你的RowType将是你的实体的一个正常形式。

    class RowType extends AbstractType {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
    
           $builder               
                ->add('name', 'text');
        }
    
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'AcmeBundleDemoBundleEntityRow',
            ));
        } }
    

    验证可以像普通窗体一样在RowType上,但如果遇到问题,则可以在AllRowsType的默认选项上设置cascade_validation => true。

    要在树枝中迭代每个RowType,你可以这样做:

    {% for row in form.rows%} {{ form_row(row.name) }} {% endfor %}
    

    在树枝上,为了获得每行实体的ID,你可以这样做:

    {{ row.vars.value.id }}
    

    在控制器上,你可以做$allrowsForm->get('rows')->getData()并且你有一个RowCollection的Row Entities并且做你想做的任何事情。

    您可以阅读http://symfony.com/doc/current/cookbook/form/form_collections.html了解如何处理表单集合。

    链接地址: http://www.djcxy.com/p/81741.html

    上一篇: Creating a grid of forms in Symfony 2

    下一篇: How to increase space between text and it's underline in TextView Android?