2017-06-30 6 views
0

CollectionTypeのフィールドをいくつか作成します。コレクションタイプの動的な量を生成

私がモデレーターは、私がDBからすべてのモデレータをロードし、フォーム

に各modeatorにサブユーザーを割り当てるそのような何かをしようとしている:$options['moderators']

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    foreach ($options['moderators'] as $mod) { 
     $builder 
     ->add('users['.$mod->getId().']', CollectionType::class, array(
      'entry_type' => UserFields::class, 
      'allow_add' => true, 
      'label' => false, 
      'entry_options' => array(
     ), 
     )); 
    } 
} 

の配列がありますモデレータエンティティ。 私がモデレーターエンティティとしてCollectionTypeフィールドの同じ量を作成する(上記の例 - 私は、フィールド名として[]を渡すカントので動作しません)

各モデレータは一意のIDを持っているので、私はそれを使用し、このIDを渡すことができますそれぞれCollectionTypeですがどうですか?

  1. ControllerのCollectionTypeのこのIDを取得するにはどうすればよいですか?
  2. このフォームをページに表示するにはどうすればよいですか?

答えて

0

私はあなたがコレクションが何であるかに少し深く潜るする必要があると思う;)

entry_typeはにformTypeする必要がありますので、あなたのコレクションは、無効です。私はあなたの場合にはEntityType(あなたがユーザーのリストから選択するようにしたい場合)でなければならないと推測しています。

だから、各モデレーターとのモデレーターのコレクションをサブユーザーのコレクションにしたいとします(通常、CRUDを行い、各モデレーターを別々に編集するので、サブコレクションのコレクションは必要ありません)メートルと思い、あなたのコントローラーであなたを

ModeratorCollectionType.php

<?php 

namespace AppBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\Extension\Core\Type\CollectionType; 
use Symfony\Component\Form\FormBuilderInterface; 

class ModeratorCollectionType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('moderators', CollectionType::class, [ 
      'entry_type' => ModeratorType::class, 
      'prototype' => true, 
      'allow_add' => true 
     ]); 
    } 
} 

ModeratorType.php

<?php 

namespace AppBundle\Form; 

use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\Extension\Core\Type\CollectionType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 

class ModeratorType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('users', CollectionType::class, [ 
      'entry_type' => EntityType::class, 
      'entry_options' => [ 
       'class' => 'AppBundle:User', 
      ], 
      'prototype' => true, 
      'allow_add' => true 
     ]); 
    } 

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

:、あなたはこのようなものが必要だろうModeratorCollectionのフォーム

+0

どのモデレータが特定のユーザーを持っているかを知るには?私は、司会者はidが '1'' 2'' 3'で、どこにユーザーを追加するのかを知る方法は? –