2017-06-26 4 views
0

私はSymfonyベースのプロジェクトで作業していますが、私はFosUserBundleを使用しています。コレクションタイプのデータ配列を作成する

私は、CollectionType:Classをレンダリングしようとすると、ユーザーが自分のデータベースにまだないコンテンツをフィールドに埋め込ませてもらいたいという問題があります。

Symfonyのドキュメントで読んだことは、そのタイプの作業を行うためには、エントリとしてデータ配列の配列を持つ必要があります。

私の質問は、「とにかく、データの配列を作成し、それを自分のフィールドに渡して表示させることはできますか?

マイWorkshopType:

class WorkshopType extends AbstractType implements ContainerAwareInterface 
{ 
    use ContainerAwareTrait; 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('title', TextType::class, array('label'=>"Titre")) 
      ->add('goal', TextareaType::class, array('label'=>"But")) 
      ->add('theme', TextType::class, array('label'=>"Theme")) 
      ->add('target', TextType::class, array('label'=>"Cible")) 
      ->add('summary', TextareaType::class, array('label'=>"Résumé")) 
      ->add('maxParticipants', NumberType::class, array('label'=>"Nombre de Participants Maximum", 'data' => 0)) 
      ->add('moderatorsNumber', NumberType::class, array('label'=>"Nombre de Modérateurs",'data' => 0)) 
      ->add('materials', CollectionType::class, [ 
       //'label' => 'Matériaux', 
       'entry_type' => TextType::class, 
       'entry_options' => array(
        'attr'  => array('class' => 'material-box') 
       ), 
       'prototype' => true, 
       'allow_add' => true, 
       'allow_delete' => true, 
      ]) 
      ->add('link', UrlType::class, array('label'=>"Lien")) 
      ->add('video', FileType::class, array('label'=>"Ajouter une vidéo", "data_class" => null)) 
      ->add('image', FileType::class, array('label'=>"Ajouter une image", "data_class" => null)) 
      ->add('document', FileType::class, array('label'=>"Ajouter un document", "data_class" => null)) 
      ->add('tags', EntityType::class, [ 
       'class' => Tag::class, 
       'choice_label' => 'name', 
       'multiple' => true, 
       'expanded' => true, 
       'empty_data' => 'Aucun', 
       'label' => 'Ajouter des affinités', 
      ]) 
      ->add('duration', TimeType::class, array(
       'label' => 'Durée', 
       'input' => 'timestamp', 
       'widget' => 'choice', 
      )) 
      ->add('preparationTime', TimeType::class, array(
       'label' => 'Temps de préparation', 
       'input' => 'timestamp', 
       'widget' => 'choice', 
      )) 
     ; 

     // It's here you have to make changes if you want to change the duration render type 
     $builder 
      ->get('duration')->addModelTransformer(new SecondDurationDataTransformer()); 
     $builder 
      ->get('preparationTime')->addModelTransformer(new SecondDurationDataTransformer()); 
     $builder 
      ->get('document')->addModelTransformer(new MediaTransformer(
       "ApiBundle\Entity\Workshop", 
       $options['entityId'], 
       $this->container->get('doctrine.orm.entity_manager'), 
       $this->container->get('bnpp.api.file_manager.local'), 
       "document", 
       "ApiBundle\Entity\Document")); 
     $builder 
      ->get('image')->addModelTransformer(new MediaTransformer(
       "ApiBundle\Entity\Workshop", 
       $options['entityId'], 
       $this->container->get('doctrine.orm.entity_manager'), 
       $this->container->get('bnpp.api.file_manager.local'), 
       "image", 
       "ApiBundle\Entity\Image")); 
     $builder 
      ->get('video')->addModelTransformer(new MediaTransformer(
       "ApiBundle\Entity\Workshop", 
       $options['entityId'], 
       $this->container->get('doctrine.orm.entity_manager'), 
       $this->container->get('bnpp.api.file_manager.local'), 
       "video", 
       "ApiBundle\Entity\Video")); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults([ 
      'data_class' => Workshop::class, 
      'required' => false, 
      "entityId" => null, 
     ]); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function getBlockPrefix() 
    { 
     return 'apibundle_workshop'; 
    } 


} 

は、あなたがそのようにデフォルト値として配列を渡すことができ、

答えて

0

をあなたのすべてをありがとう:

'choices' => $yourArray,

+0

さて、あなたの答えをありがとう –

関連する問題