2016-06-20 40 views
1

我不能克隆數組集合對象,因爲它說它不是一個對象。Symfony3克隆說不是對象

這是我這裏的行動:

public function editAction(Request $request, Post $post) 
{ 
    $deleteForm = $this->createDeleteForm($post); 
    $editForm = $this->createForm('AppBundle\Form\PostType', $post); 
    $editForm->handleRequest($request); 

    var_dump($post->getPostImages()); // object 
    // $original_images = clone $post->getPostImages(); says not object 
    $original_images = $post->getPostImages(); 

    if ($editForm->isSubmitted() && $editForm->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $postImages = $post->getPostImages(); 
     $post->setPostImages([]); 
     var_dump($original_images); // not same as 1st dump 
     die; 

     foreach ($postImages as $image) { 
      $fileName = md5(uniqid()).'.'.$image->guessExtension(); 
      if ($image->move(
      $this->container->getParameter('post_image').$post->getTitle(), 
      $fileName)) { 
       // $images[] = $fileName; 
       $post->addPostImage(array('fileName' => $fileName)); 


      } 
     } 
     $em->persist($post); 
     $em->flush(); 

     return $this->redirectToRoute('post_edit', array('id' => $post->getId())); 
    } 

    if ($this->checkAction($post)) { 
     return $this->checkAction($post); 
    } 

    return $this->render('post/edit.html.twig', array(
     'post' => $post, 
     'edit_form' => $editForm->createView(), 
     'delete_form' => $deleteForm->createView(), 
    )); 
} 

首屆VAR轉儲返回此:

object(Doctrine\Common\Collections\ArrayCollection)#380 (1) { ["elements":"Doctrine\Common\Collections\ArrayCollection":private]=> array(1) { [0]=> array(1) { ["fileName"]=> string(36) "ba2a3dd44902cc4411e6508015f026a3.png" } } } 

當我試圖克隆我得到這個對象:

Error: __clone method called on non-object 

而且第二個var轉儲返回此(在提交表單後):

array(1) { 
    [0]=> 
    object(Symfony\Component\HttpFoundation\File\UploadedFile)#14 (7) { 
    ["test":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> 
    bool(false) 
    ["originalName":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> 
    string(34) "Screenshot_2016-06-20_14-28-36.png" 
    ["mimeType":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> 
    string(9) "image/png" 
    ["size":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> 
    int(610945) 
    ["error":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> 
    int(0) 
    ["pathName":"SplFileInfo":private]=> 
    string(14) "/tmp/phpoY3L5i" 
    ["fileName":"SplFileInfo":private]=> 
    string(9) "phpoY3L5i" 
    } 
} 

更新#1: 表單生成器:

<?php 
namespace AppBundle\Form; 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use Symfony\Component\Form\Extension\Core\Type\FileType; 
use Symfony\Component\Form\CallbackTransformer; 
class PostType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('title') 
      ->add('content') 
      ->add('postImages', FileType::class, array('label' => 'Post Image', 'multiple' => true, 'data_class' => 'Doctrine\Common\Collections\ArrayCollection', 'required' => false)) 
     ; 
      } 
    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Post' 
     )); 
    } 
} 
+0

我們可以看到你'AppBundle \ Form \ PostType'代碼嗎? –

+0

這裏是github鏈接https://github.com/akyllax/flamerobin_website – Arthur

回答

1

顯然移動:

$original_images = $post->getPostImages(); 

上圖:

$editForm->handleRequest($request); 

的伎倆,現在的代碼如下所示:

$deleteForm = $this->createDeleteForm($post); 
$editForm = $this->createForm('AppBundle\Form\PostType', $post); 
$original_images = $post->getPostImages(); 
$editForm->handleRequest($request); 
+0

嗯。它真的有效,因爲handleRequest是映射任何發佈的數據的東西。您是否打算克隆原始數據或發佈的數據?關閉主題,但嘗試用Symfony轉儲替換var_dump。 – Cerad

+0

我不知道有一個symfony轉儲,謝謝你。 問題是我上傳了一個文件(或更多),並在編輯表單上,如果你選擇不上傳他們將在數據庫中用空數組替換的文件(我基本上會丟失文件)。因此,我想保存我在那裏的所有內容,並檢查用戶是否上傳了任何內容,如果他沒有,我會重新填充內容,如果他上傳了另一個文件,我會在旁邊添加內容。 – Arthur