Я пытаюсь взять один тип формы и отображать его, однако мне нужно, чтобы пользователь загружал загрузку патча в одно время. Так скажите 30 файлов для загрузки, 30 форм на странице. Я получаю эту ошибку:
Ожидается, что данные вида формы будут иметь тип скаляр, массив или экземпляр \ ArrayAccess, но это экземпляр класса MS \ CoreBundle \ Entity \ Photo. Вы можете избежать этой ошибки, установив опцию «data_class» в «MS \ CoreBundle \ Entity \ Photo» или добавив трансформатор представлений, который преобразует экземпляр класса MS \ CoreBundle \ Entity \ Photo в скаляр, массив или экземпляр \ ArrayAccess.
- Как получить переданные опции в форме Symfony
- Добавить ошибку в элемент формы Symfony 2
- Symfony2: переопределение встроенного типа поля с настраиваемым типом поля с тем же именем
- Укажите различные группы проверки для каждого элемента коллекции в Symfony 2?
- Значения форм пусты (не значение) после визуализации виджета в форме
Код типа Галерея:
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() ); }