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';
}
}
は、あなたがそのようにデフォルト値として配列を渡すことができ、
さて、あなたの答えをありがとう –