File name could not be generated: property slug is empty.

Comment corriger corriger cet erreur ?

File name could not be generated: property slug is empty.

Dans mon app, je souhaite utiliser le « slug » comme nom pour les fichiers charger sur le site via des formulaires.

Le slug correspond au nom original du fichier upload sans l’extension. Mais le problème est que le slug est constamment vide. Je suppose que me nundle VichUploaderBundle est exécuté avant que le slug ne soit génrer par Doctrine.

Nous allons ici générer manuellement le slug, afin que le bundle puisse l’utiliser. L’idée est donc de générer le slug avant que le bundle l’utiiliser en faisant appel aux évenements Doctrine PrePersist et PostPersist (dans le cas ou le slug peut changer lors d’un update).

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Sluggable\Util\Urlizer;

/**
 * @ORM\HasLifecycleCallbacks
 * 
 */
Class MediaEntity
{

    /**
     * @var string 
     * 
     * @ORM\Column(name="name", type="string", nullable=false)
     *
     * @Assert\Type(type="string", message="assert.type")
     */
    private $name;

    /**
     * @Gedmo\Slug(fields={"name"})
     * @ORM\Column(length=128, unique=true)
     */
    private $slug;

    /**
     * @var \Symfony\Component\HttpFoundation\File\UploadedFile
     * 
     * @Vich\UploadableField(
     *  mapping="logo", 
     *  fileNameProperty="name"
     * )
     */
    private $file;

     /**
     * @ORM\PrePersist()
     * @ORM\PreUpdate()
     */
    public function defineSlug()
    {
        # On genere le slug nous même 
        $slug = $this->getFile()->getName();
        $this->slug = Urlizer::urlize($slug);
    }
}
# vich_uploader.yaml
vich_uploader:
    db_driver: 
        orm
            mappings:
               logo:
                   namer: 
                       service: Vich\UploaderBundle\Naming\PropertyNamer
                       options: { property: 'slug' }

L’autre solution est de créer votre propre « File Namer ».