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