-->

在Symfony2的实体形式类型选项组(Option groups in symfony2 enti

2019-09-22 23:07发布

有没有什么办法的实体字段可以显示在Symfony2中(V.2.1)在选项组分组,例如我有这样的事情在我的表单类:

$builder->add('account',
                    'entity',
                    array(
                        'class' => 'MyBundle\Entity\Account',
                        'query_builder' => function(EntityRepository $repo){
                            return $repo->findAllAccounts();
                        },
                        'required'  => true,
                        'empty_value' => 'Choose_an_account',
                    );

但是,(当然)作为存储库类从数据库中读取它,我想显示他们在ComboBox分组它们显示。 该帖子中提到,有特色的加入到2.2版本的开箱,但什么选择呢,我们2.1的用户有哪些?

该分组将基于一个名为场Type ,可以说我有该调用获取getType()返回一个字符串在我的帐户实体。

谢谢。

Answer 1:

我与类别处理时做了类似的事情。

首先,当你建立的形式,通过选择列表从函数的结果getAccountList()如下:

 public function buildForm(FormBuilderInterface $builder, array $options){
        $builder        
            ->add('account', 'entity', array(
                'class' => 'MyBundle\Entity\Account',
                'choices' => $this->getAccountList(),
                'required'  => true,
                'empty_value' => 'Choose_an_account',
            ));
}  

该函数应该像做如下(内容取决于你组织你的结果的方式)。

private function getAccountList(){
    $repo = $this->em->getRepository('MyBundle\Entity\Account');

    $list = array();

    //Now you have to construct the <optgroup> labels. Suppose to have 3 groups
    $list['group1'] = array();
    $list['group2'] = array();
    $list['group3'] = array(); 

    $accountsFrom1 = $repo->findFromGroup('group1'); // retrieve your accounts in group1.
    foreach($accountsFrom1 as $account){
        $list[$name][$account->getName()] = $account;
    }
    //....etc

    return $list;
} 

当然,你可以做到这一点更多的动力! 煤矿只是一个简单的例子!

您也可以通过将EntityManager您的自定义窗体类。 因此,定义构造函数:

class MyAccountType extends AbstractType {

    private $em;

    public function __construct(\Doctrine\ORM\EntityManager $em){
        $this->em = $em; 
    }    
} 

并通过EntityManager ,当你启动MyAccountType对象。



文章来源: Option groups in symfony2 entity form type