Ошибка сбора формы

Я пытаюсь взять один тип формы и отображать его, однако мне нужно, чтобы пользователь загружал загрузку патча в одно время. Так скажите 30 файлов для загрузки, 30 форм на странице. Я получаю эту ошибку:

Ожидается, что данные вида формы будут иметь тип скаляр, массив или экземпляр \ ArrayAccess, но это экземпляр класса MS \ CoreBundle \ Entity \ Photo. Вы можете избежать этой ошибки, установив опцию «data_class» в «MS \ CoreBundle \ Entity \ Photo» или добавив трансформатор представлений, который преобразует экземпляр класса MS \ CoreBundle \ Entity \ Photo в скаляр, массив или экземпляр \ ArrayAccess.

Код типа Галерея:

public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('photo', 'collection', array( 'type' => new PhotoType(), 'allow_add' => true, 'data_class' => 'MS\CoreBundle\Entity\Photo', 'prototype' => true, 'by_reference' => false, )); } 

Код типа фотографии:

 public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('description', 'text', array('label' => "Title:", 'required' => true)) ->add('File') ->add('album', 'entity', array( 'class' => 'MSCoreBundle:Album', 'property' => 'title', 'required' => true, 'query_builder' => function(EntityRepository $er) { return $er->createQueryBuilder('a') ->orderBy('a.title', 'ASC'); }, )) ; } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'MS\CoreBundle\Entity\Photo', )); } 

Функция My Controller:

  public function newAction($count) { for($i = 1; $i <= $count; $i++) { $entity = new Photo(); } $form = $this->container->get('ms_core.gallery.form'); $form->setData($entity); return array( 'entity' => $entity, 'form' => $form->createView() ); } 

Любая помощь будет большой.

Вы не должны передавать параметр data_class в тип коллекции в вашем GalleryType. Или, если вы хотите переопределить значение PhotoType по умолчанию (которое уже установлено, поэтому вам не нужно), вы можете указать его в массиве параметров следующим образом:

 public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('photo', 'collection', array( 'type' => new PhotoType(), 'allow_add' => true, 'options' => array('data_class' => 'MS\CoreBundle\Entity\Photo'), 'prototype' => true, 'by_reference' => false, )); } 

Удостоверьтесь, что у вас есть опция data_class умолчанию, data_class в вашем «GalleryType», похоже, это Альбом.

Кроме того, в вашем контроллере вы не создаете форму правильно. Вам нужно вызвать setData() с типом данных формы, в данном случае с альбомом.

 public function newAction($count) { $album = new Album(); for($i = 1; $i <= $count; $i++) { $album->addPhoto(new Photo()); } $form = $this->container->get('ms_core.gallery.form'); $form->setData($album); return array( 'entity' => $album, 'form' => $form->createView() ); }