2016-04-21 12 views
0

私はSymfonyを少し使用しています。フォームを作成する方法を見つけようとしています。 MVCベースのソリューションを使用する必要があります。Symfony2 - 異なるエンティティを使用するフォームを作成する

私のフォームは、さまざまなエンティティのいくつかの情報を尋ねる必要がありますし、その情報をデータベースで抽出する必要があります。 データベースは問題ありません。

私は、エンティティの種類が異なるフォームを作成するにはどうしたらいいですか?

エンティティのデータベースに含まれているデータを使ってスクロールダウンメニューを作成するにはどうすればよいですか?

+2

http://symfony.com/doc/current/reference/forms/types/entity.htmlあなたはセレクを取得する選択肢を追加し、フォームのフィールドとして関連をマッピングすることができます関連エンティティの(選択した)プロパティを持つオプションを含むt要素。 – chalasr

答えて

0

@chalasrによるコメントが適用されない場合、つまりエンティティが関連していない場合は、コントローラで次のようなことを行うことができます。単純に各エンティティが{X}のようにフォームを入力のための$フォーム変数を作成します。

$formA = $this->createForm(AppBundle\Entity\EntityAType($entityA)); 
$formB = $this->createForm(AppBundle\Entity\EntityBType($entityB)); 
... 

return array(
    'formA' => $formA->createView(), 
    'formB' => $formB->createView(), 
    ... 
); 
0

それぞれを維持しながら、あなたは、単にフォームを組み合わせることができますので、

namespace AppBundle\Form; 

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

class ReallyBigFormType extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('foo', FooType::class, [ 
       // label, required, ... as well as options of FooType 
      ]) 
      ->add('bar', BarType::class, [ 
       // label, required, ... as well as options of BarType 
      ]) 
     ; 

    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults([]); 
    } 

} 

のように分離して、AのようなFooTypeBarTypeを定義します通常のフォーム

namespace AppBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use Symfony\Component\Form\Extension\Core\Type\TextType 

class FooType extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name', TextType::class, [ 
       'label' => 'foo.name', 
      ]) 
     ; 
    } 

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

} 
関連する問題