2012-06-27 18 views
8

Tôi đang cố gắng lấy một loại biểu mẫu và hiển thị nó theo thời gian tôi cần cho người dùng tải lên bản tải lên bản vá cùng một lúc. Vì vậy, nói 30 tệp để tải lên, 30 biểu mẫu trên trang. Tôi nhận được lỗi này:Lỗi bộ sưu tập biểu mẫu

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.

Mã Loại Gallery là:

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

Mã Ảnh Type là:

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

chức năng điều khiển của tôi là:

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


    } 

Bất kỳ trợ giúp nào cũng tuyệt vời.

Trả lời

11

Bạn không được chuyển tùy chọn data_class tới collection type trong Loại thư viện của mình. Hoặc, nếu bạn muốn ghi đè mặc định của bản kẽm để in ảnh (mà đã được thiết lập, vì vậy bạn không cần phải), bạn có thể xác định nó trong mảng các tùy chọn như vậy:

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

Hãy chắc chắn rằng bạn làm có tùy chọn mặc định data_class được đặt trong "Loại thư viện" của bạn, có vẻ như đây là một Album.

Ngoài ra, trong bộ điều khiển của bạn, bạn không tạo biểu mẫu chính xác. Bạn cần gọi số setData() với loại dữ liệu của biểu mẫu, trong trường hợp này là Anbom.

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() 
     ); 
} 
Các vấn đề liên quan