0

我想使用多个实体在 createformbuilder 中创建表单。例如,我想要一个包含来自多个实体的多个字段的表单,并且我想检查视图字段的条件

userEntity -> email , password 
resselerEntity - > (userEntity fields) + managerName , managerFamily
leaderEntity - > (userEntity fields) + credit

如果我想显示 resseler 字段,必须显示userEntityresselerEntity

如果要显示userEntity,必须显示所有字段userEntity

等等,

那么我该如何解决这个解决方案?提前致谢!

4

3 回答 3

0

据我了解您的问题,您应该使用类型继承:

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

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => '\Hamid\User',
        ));
    }

    public function getName()
    {
        return 'hamid_user';
    }
}

class ResellerType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('managerName')
            ->add('managerFamily')
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => '\Hamid\Reseller',
        ));
    }

    public function getName()
    {
        return 'hamid_reseller';
    }

    public function getParent()
    {
        return 'hamid_user';
    }
}

然后为每个实体使用正确的表格。如果出于某种原因,您需要一个适应设置为表单的实体类的单个表单,则需要使用表单事件,如文档中所述

于 2013-12-22T14:38:30.090 回答
0

我认为唐让你大部分时间都在那里。将构造参数添加到您的 UserType

public function __construct($otherEntityType) // Reseller, Leader etc.

然后使用 otherEntityType 来确定为 UserType 创建了哪些字段。

于 2013-01-15T14:39:54.367 回答
0

最常见的解决方案是为(在您的情况下)创建单个表单:

  • 用户实体
  • 经销商实体

然后,创建一个具有 userEntityFormType 和 ressellerEntityFormType 两个字段的新表单。

这样,您可以:

  • 分离你的约束
  • 在别处使用单一形式

类似的东西

class UserEntityType extends AbstractType
{
 public function BuildForm(FormBuilderInterface $builder, array $options)
 {
  $builder->add('firstField')
          ->add('secondField')
          [...]
          ->lastField;
 }

 public function getName()
 {
  return 'UserEntityType ';
 }
}


class RessellerEntityType extends AbstractType
{
 public function BuildForm(FormBuilderInterface $builder, array $options)
 {
  $builder->add('firstField')
          ->add('secondField')
          [...]
          ->lastField;
 }

 public function getName()
 {
  return 'RessellersEntityType ';
 }
}



class AggregateEntityType extends AbstractType
    {
     public function BuildForm(FormBuilderInterface $builder, array $options)
     {
      $builder->add('userEntityField',UserEntityType,array('multiple'=>true)
              ->add('ressellersEntityField',RessellersEntityType,array('multiple'=>true));
     }

     public function getName()
     {
      return 'AggregateEntityType ';
     }
    }
于 2013-01-15T08:01:24.027 回答