2012-06-27 9 views
8

Bir form türünü almaya çalışıyorum ve ancak kullanıcının bir seferde bir yama yüklemesi yüklemesi için gereken süreyi göstermeye çalışıyorum. Yüklenecek 30 dosya, sayfada 30 form diyelim.Form Toplama Hatası

The form's view data is expected to be of type scalar, array or an instance of \ArrayAccess, but is an instance of class MS\CoreBundle\Entity\Photo. You can avoid this error by setting the "data_class" option to "MS\CoreBundle\Entity\Photo" or by adding a view transformer that transforms an instance of class MS\CoreBundle\Entity\Photo to scalar, array or an instance of \ArrayAccess.

Galeri Tipi kodudur:

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, 
    )); 
} 

Foto Tipi kodudur:

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', 
     )); 
    } 

Benim Kontrolör fonksiyonudur:

 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() 
      ); 


    } 
bu hatayı alıyorum

Herhangi bir yardım harika olurdu.

cevap

11

data_class seçeneğini, GaleriType öğenizde collection type seçeneğine vermemelisiniz. Eğer (bunu yapmak zorunda olmamalıdır yüzden, zaten ayarlanmış) phototype en varsayılan geçersiz kılmak istiyoruz Ya da, bunu gibi seçenekler dizide belirtebilirsiniz:

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, 
    )); 
} 

Eğer yapmak emin olun "GalleryType" öğenizde bir varsayılan data_class seçeneği ayarlanmış, bir Albüm olmalı, görünüyor. Ayrıca, denetleyicinizde formu doğru şekilde oluşturmuyorsunuz. Bu durumda, bir Album olan formun veri türü ile setData()'u aramanız gerekir.

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() 
     ); 
}