Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine Symfony3克隆表示不是对象_Doctrine_Symfony - Fatal编程技术网

Doctrine Symfony3克隆表示不是对象

Doctrine Symfony3克隆表示不是对象,doctrine,symfony,Doctrine,Symfony,我无法克隆阵列集合对象,因为它说它不是对象 这是我的行动: public function editAction(Request $request, Post $post) { $deleteForm = $this->createDeleteForm($post); $editForm = $this->createForm('AppBundle\Form\PostType', $post); $editForm->handleRequest($req

我无法克隆阵列集合对象,因为它说它不是对象

这是我的行动:

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转储将返回以下内容(提交表单后):

更新#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'
        ));
    }
}
显然在移动:

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

我们可以看到你
AppBundle\Form\PostType
code吗?这是github链接Hmm。它真的有效吗?因为handleRequest是映射任何发布数据的东西。您打算克隆原始数据还是发布的数据?和主题无关,但试着用Symfony dump替换var_dump。我不知道有Symfony dump,谢谢。问题是,我上传了一个文件(或更多),如果你选择不上传任何文件,它们将在数据库中被替换为一个空数组(我基本上会丢失这些文件)。因此,我想保存我在那里的所有内容,并检查用户是否上传了任何内容,如果他没有,我将用已经在那里的内容重新填充它,如果他上传了另一个文件,我将在已经在那里的内容旁边添加它。
$deleteForm = $this->createDeleteForm($post);
$editForm = $this->createForm('AppBundle\Form\PostType', $post);
$original_images = $post->getPostImages();
$editForm->handleRequest($request);