Bonjour,
Voila je rencontre un petit problème avec mon code.
j'ai suivi le tutorielle sur l'uploade de fichier grace aux annotation, sauf que arrivée a la partie sur l'annotation reader il ne détecte pas mes proprietée annotée.
pouvez vous me donner des piste pour résoudre mon problème.
mon entité
<?php
namespace MangaBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Shensui\ExternalBundle\Annotation\Uploadable;
use Shensui\ExternalBundle\Annotation\UploadableField;
use Symfony\Component\HttpFoundation\File\File;
/**
* Manga
*
* @ORM\Table(name="manga")
* @Gedmo\SoftDeleteable(fieldName="deleteAt", timeAware=false)
* @ORM\Entity(repositoryClass="MangaBundle\Repository\MangaRepository")
* @Uploadable()
*/
class Manga
{
/*mes champs*/
/**
* @var \DateTime
* @Gedmo\Timestampable(on="create")
* @ORM\Column(name="created", type="datetime")
*/
private $created;
/**
* @var \DateTime
* @Gedmo\Timestampable(on="update")
* @ORM\Column(name="updated", type="datetime")
*/
private $updated;
/**
* @var dateTime
*
* @ORM\Column(name="deleteAt", type="datetime", nullable=true)
*/
private $deleteAt;
/**
* @var string
*
* @ORM\Column(name="cover", type="string", length=255, nullable=true)
*/
private $filename;
/**
* @UploadableField(filename="filename", path="covers")
*/
private $file;
/*les geteur et seteur de l’entité*/
/**
* @return File|null
*/
public function getFile()
{
return $this->file;
}
/**
* @param File $file|null
*/
public function setFile($file)
{
$this->file = $file;
}
/**
* @return string
*/
public function getFilename()
{
return $this->filename;
}
/**
* @param string $filename
*/
public function setFilename($filename)
{
$this->filename = $filename;
}
}
mon UploadableField
<?php
namespace Shensui\ExternalBundle\Annotation;
use Doctrine\Common\Annotations\Annotation\Target;
use InvalidArgumentException;
/**
* @Annotation
* @Target("PROPERTY")
*/
class UploadableField
{
private $filename;
private $path;
public function __construct(array $options)
{
if (empty($options['filename'])) {
throw new InvalidArgumentException("L'annotation UplodableField doit avoir un attribut 'filename'");
}
if (empty($options['path'])) {
throw new InvalidArgumentException("L'annotation UplodableField doit avoir un attribut 'path'");
}
$this->filename = $options['filename'];
$this->path = $options['path'];
}
/*les geteur et seteur*/
}
mon UploadAnnotationReader
<?php
namespace Shensui\ExternalBundle\Annotation;
use Doctrine\Common\Annotations\AnnotationReader;
class UploadAnnotationReader
{
/**
* @var AnnotationReader
*/
private $reader;
public function __construct(AnnotationReader $reader)
{
$this->reader = $reader;
}
/**
* @param $entity
* @return bool
*/
public function isUploadable($entity) {
$reflection = new \ReflectionClass(get_class($entity));
return $this->reader->getClassAnnotation($reflection, UploadableField::class) !== null;
}
/**
* Liste les champs uploadable d'une entité (sous forme de tableau associatif)
*/
public function getUploadableFields($entity) {
$reflection = new \ReflectionClass(get_class($entity));
if (!$this->isUploadable($entity)){
return [];
}
$properties = [];
foreach($reflection->getProperties() as $property) {
$annotation = $this->reader->getPropertyAnnotation($property, UploadableField::class);
if ($annotation !== null) {
$properties[$property->getName()] = $annotation;
}
}
return $properties;
}
}
)
merci d'avence de votre aide.