0

createformbuilder で複数のエンティティを使用してフォームを作成したい。たとえば、多くのエンティティからの多くのフィールドを持つフォームが必要で、ビュー フィールドの条件を確認したい

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

再販業者のフィールドを表示したい場合は、 と のすべてのフィールドを表示する必要がありuserEntityますresselerEntity

を表示したい場合は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

最も一般的な解決策は、(あなたの場合)の単一のフォームを作成することです:

  • userEntity
  • resellerEntity

次に、userEntityFormType と ressellerEntityFormType の 2 つのフィールドを持つ新しいフォームを作成します。

そのようにして、次のことができます。

  • 制約を分離する
  • 別の場所で単一フォームを使用

そんな感じ

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 に答える
0

ドンはあなたをそこまで連れて行ったと思います。UserType にコンストラクト引数を追加します

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

次に、otherEntityType を使用して、UserType に対して作成されるフィールドを決定します。

于 2013-01-15T14:39:54.367 に答える