vich 上传图片在删除时不能为空

vich upload image cannot null when remove

我有一个问题,我在我的网站上使用了 EasyAdminBundle 和 VichUploaderBundle。 问题是当我删除图像时 returns 出现错误,如下所示:

Integrity constraint violation: 1048 Le champ 'image' ne peut être vide (null)

这是我的代码:

config.yml :

vich_uploader:
db_driver: orm
mappings:
        photo_images:
            uri_prefix:         %app.path.photo_images%
            upload_destination: %kernel.root_dir%/../web/uploads/images
            namer:              vich_uploader.namer_uniqid

我的 easyadmin 配置:

entities:
    Event:
        class: AppBundle\Entity\Event
        label: 'Evenements'
        new:
            title: 'Création événement'
            fields: 
                - { property: 'nom', label: 'Nom/Intitulé' }
                - { property: 'date', label: 'Date' }
                - { property: 'heure', label: 'Heure' }
                - { property: 'lieu', label: 'Lieu' }
                - { property: 'categorie', label: 'Catégorie' }
                - { property: 'prix', label: 'Prix' }
                - { property: 'imageFile', label: 'Image',type: 'vich_image' }
                - { property: 'isActive', label: 'Publié' }
        edit:
            title: 'Evenement (#%%entity_id%%)'
            fields: 
                - { property: 'nom', label: 'Nom/Intitulé' }
                - { property: 'date', label: 'Date' }
                - { property: 'heure', label: 'Heure' }
                - { property: 'lieu', label: 'Lieu' }
                - { property: 'categorie', label: 'Catégorie' }
                - { property: 'prix', label: 'Prix' }
                - { property: 'imageFile', label: 'Image', type: 'vich_image' }
                - { property: 'isActive', label: 'Publié' }

还有我的实体:

<?php

 namespace AppBundle\Entity;

 use Doctrine\ORM\Mapping as ORM;
 use Symfony\Component\Validator\Constraints as Assert;
 use Symfony\Component\HttpFoundation\File\File;
 use Vich\UploaderBundle\Mapping\Annotation as Vich;

 /**
 * Events
 *
 * @ORM\Table(name="event")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\EventRepository")
 * @Vich\Uploadable
 */
 class Event
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 * @Assert\NotBlank(message = "not null")
 * @ORM\Column(name="nom", type="string", length=255)
 */
private $nom;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="date", type="date")
 */
private $date;

/**
 * @var \Time
 *
 * @ORM\Column(name="heure", type="time")
 */
private $heure;

/**
 * @var string
 * @Assert\NotBlank(message = "not null")
 * @ORM\Column(name="lieu", type="string", length=255)
 */
private $lieu;

/**
 * @var string
 * @Assert\NotBlank(message = "not null")
 * @ORM\Column(name="categorie", type="string", length=255)
 */
private $categorie;

/**
 * @var float
 * @ORM\Column(name="prix", type="float")
 */
private $prix;

/**
 * @var bool
 * @ORM\Column(name="isActive", type="boolean", options={"default":"0"})
 */
protected $isActive;

/**
* One Event has Many Command.
* @ORM\OneToMany(targetEntity="Commande", mappedBy="event")
*/
private $commandes;

/**
 * @ORM\Column(type="string", length=255)
 * @var string
 */
private $image;

/**
 * @Vich\UploadableField(mapping="photo_images", fileNameProperty="image")
 * @var File
 */
private $imageFile;

/**
 * @ORM\Column(type="datetime")
 * @var \DateTime
 */
private $updatedAt;

public function __toString()
{
    return $this->nom;
}

public function setImageFile(File $image = null)
{
    $this->imageFile = $image;

    // VERY IMPORTANT:
    // It is required that at least one field changes if you are using Doctrine,
    // otherwise the event listeners won't be called and the file is lost
    if ($image) {
        // if 'updatedAt' is not defined in your entity, use another property
        $this->updatedAt = new \DateTime('now');
    }
}

public function getImageFile()
{
    return $this->imageFile;
}

public function setImage($image)
{
    $this->image = $image;
}

public function getImage()
{
    return $this->image;
}

/**
 * Get id
 *
 * @return int
 */
public function getId()
{
    return $this->id;
}



/**
 * Set nom
 *
 * @param string $nom
 *
 * @return Event
 */
public function setNom($nom)
{
    $this->nom = $nom;

    return $this;
}

/**
 * Get nom
 *
 * @return string
 */
public function getNom()
{
    return $this->nom;
}

/**
 * Set date
 *
 * @param \DateTime $date
 *
 * @return Event
 */
public function setDate($date)
{
    $this->date = $date;

    return $this;
}

/**
 * Get date
 *
 * @return \DateTime
 */
public function getDate()
{
    return $this->date;
}

/**
 * Set heure
 *
 * @param \DateTime $heure
 *
 * @return Event
 */
public function setHeure($heure)
{
    $this->heure = $heure;

    return $this;
}

/**
 * Get heure
 *
 * @return \DateTime
 */
public function getHeure()
{
    return $this->heure;
}

/**
 * Set lieu
 *
 * @param string $lieu
 *
 * @return Event
 */
public function setLieu($lieu)
{
    $this->lieu = $lieu;

    return $this;
}

/**
 * Get lieu
 *
 * @return string
 */
public function getLieu()
{
    return $this->lieu;
}

/**
 * Set categorie
 *
 * @param string $categorie
 *
 * @return Event
 */
public function setCategorie($categorie)
{
    $this->categorie = $categorie;

    return $this;
}

/**
 * Get categorie
 *
 * @return string
 */
public function getCategorie()
{
    return $this->categorie;
}

/**
 * Set prix
 *
 * @param float $prix
 *
 * @return Event
 */
public function setPrix($prix)
{
    $this->prix = $prix;

    return $this;
}

/**
 * Get prix
 *
 * @return float
 */
public function getPrix()
{
    return $this->prix;
}

/**
 * Set isActive
 *
 * @param boolean $isActive
 *
 * @return Event
 */
public function setIsActive($isActive)
{
    $this->isActive = $isActive;

    return $this;
}

/**
 * Get isActive
 *
 * @return boolean
 */
public function getIsActive()
{
    return $this->isActive;
}
/**
 * Constructor
 */
public function __construct()
{
    $this->commandes = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
 * Add commande
 *
 * @param \AppBundle\Entity\Commande $commande
 *
 * @return Event
 */
public function addCommande(\AppBundle\Entity\Commande $commande)
{
    $this->commandes[] = $commande;

    return $this;
}

/**
 * Remove commande
 *
 * @param \AppBundle\Entity\Commande $commande
 */
public function removeCommande(\AppBundle\Entity\Commande $commande)
{
    $this->commandes->removeElement($commande);
}

/**
 * Get commandes
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getCommandes()
{
    return $this->commandes;
}

/**
 * Set updatedAt
 *
 * @param \DateTime $updatedAt
 *
 * @return Event
 */
public function setUpdatedAt($updatedAt)
{
    $this->updatedAt = $updatedAt;

    return $this;
}

/**
 * Get updatedAt
 *
 * @return \DateTime
 */
public function getUpdatedAt()
{
    return $this->updatedAt;
}
}

我不明白错误可能来自哪里,或者我做错了什么。我遵循了本网站上的教程:Link

感谢您的回答

在您的实体事件中添加 nullable=true in:

/**
 * @ORM\Column(type="string", length=255, nullable=true)
 * @var string
 */
private $image;