Symfony 4 - 不允许 VichUploader 序列化"Symfony\Component\HttpFoundation\File\File"



我有一个带有"FeuilleConge"实体(带有VichUploader(的symfony 4项目,以及一个与"FeuilleConge"实体相关的User实体和一个Absent实体。

当我提交缺席时,我也在我的User->getFeuilleConge((上保留"FeuilleConge"。

但是当我提交缺席(带有FeuilleConge实体(时,我有这个错误:

'Symfony\Component\HttpFoundation\File\File' 的序列化不是 允许

我尝试将 serialize(( 和 unserialize(( 方法添加到我的 FeuilleConge 和 Absence 实体中,如下所示:

缺席.php:

/**
* @ORMEntity(repositoryClass="AppRepositoryAbsenceRepository")
* @ORMHasLifecycleCallbacks()
* @VichUploadable
*/
class Absence
{
/**
* @ORMManyToOne(targetEntity="AppEntityFeuilleConge", inversedBy="absences", cascade={"persist", "remove"})
*/
private $feuilleConge;
/** @see Serializable::serialize() */
public function serialize()
{
return serialize(array(
$this->id,
));
}
/** @see Serializable::unserialize() */
public function unserialize($serialized)
{
list(
$this->id,
) = unserialize($serialized);
}
}

FeuilleConge.php:

<?php
namespace AppEntity;
use Serializable;
use DoctrineORMMapping as ORM;
use DoctrineCommonCollectionsCollection;
use SymfonyComponentHttpFoundationFileFile;
use DoctrineCommonCollectionsArrayCollection;
use VichUploaderBundleMappingAnnotation as Vich;
use VichUploaderBundleMappingAnnotationUploadable;
use SymfonyComponentHttpFoundationFileUploadedFile;
/**
* @ORMEntity(repositoryClass="AppRepositoryFeuilleCongeRepository")
* @VichUploadable
*/
class FeuilleConge
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="feuilleCongeName", type="string", length=255, nullable=true)
*/
private $feuilleCongeName;
/**
* @VichUploadableField(mapping="feuillesConge", fileNameProperty="feuilleCongeName")
* @var File
*/
private $feuilleCongeFile;
/**
* @ORMColumn(type="datetime", nullable=true)
* @var DateTime
*/
private $updatedAt;
/**
* @ORMOneToOne(targetEntity="AppEntityUser", mappedBy="feuilleConge", cascade={"persist", "remove"})
*/
private $user;
/**
* @ORMOneToMany(targetEntity="AppEntityAbsence", mappedBy="feuilleConge")
*/
private $absences;
public function __construct()
{
$this->absences = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}

/**
* @param File|UploadedFile $feuilleConge
*
* @return FeuilleConge
*/
public function setFeuilleCongeFile(File $feuilleCongeFile = null)
{
$this->feuilleCongeFile = $feuilleCongeFile;
if ($feuilleCongeFile) {
$this->updatedAt = new DateTimeImmutable();
}
return $this;
}
/**
* @return File|null
*/
public function getFeuilleCongeFile()
{
return $this->feuilleCongeFile;
}

/**
* Set urlPaquet
*
* @param string $urlPaquet
*
* @return FeuilleConge
*/
public function setFeuilleCongeName($feuilleCongeName)
{
$this->feuilleCongeName = $feuilleCongeName;
return $this;
}
/**
* Get urlPaquet
*
* @return string|null
*/
public function getFeuilleCongeName()
{
return $this->feuilleCongeName;
}
/**
* Set updatedAt
*
* @param DateTime $updatedAt
*
* @return FeuilleConge
*/
public function setUpdatedAt($updatedAt)
{
$this->updatedAt = $updatedAt;
return $this;
}
/**
* Get updatedAt
*
* @return DateTime
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
// set (or unset) the owning side of the relation if necessary
$newFeuilleConge = $user === null ? null : $this;
if ($newFeuilleConge !== $user->getFeuilleConge()) {
$user->setFeuilleConge($newFeuilleConge);
}
return $this;
}
/**
* @return Collection|Absence[]
*/
public function getAbsences(): Collection
{
return $this->absences;
}
public function addAbsence(Absence $absence): self
{
if (!$this->absences->contains($absence)) {
$this->absences[] = $absence;
$absence->setFeuilleConge($this);
}
return $this;
}
public function removeAbsence(Absence $absence): self
{
if ($this->absences->contains($absence)) {
$this->absences->removeElement($absence);
// set the owning side to null (unless already changed)
if ($absence->getFeuilleConge() === $this) {
$absence->setFeuilleConge(null);
}
}
return $this;
}
/** @see Serializable::serialize() */
public function serialize()
{
return serialize(array(
$this->id,
$this->feuilleCongeName,
));
}
/** @see Serializable::unserialize() */
public function unserialize($serialized)
{
list(
$this->id,
) = unserialize($serialized);
}
}

我在用户实体上添加了相同的方法。 但问题是一样的。

有人可以帮我吗?

你需要在你的User类上添加序列化方法,因为你的问题是由于Symfony试图序列化它。然后,您的Absent类被序列化,只是因为Symfony尝试序列化整个User对象(您需要避免(

最新更新