Я изучаю события в Doctrine, в настоящее время работаю над prePersist () при загрузке изображения.Я использую здесь подписчика.
AvatarSubscriber.php
namespace App\Subscribers;
use App\Entity\Teacher;
use App\Utils\FileManager;
use Doctrine\Common\EventSubscriber;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
use Doctrine\ORM\Events;
class AvatarSubscriber implements EventSubscriber
{
private $_fileManager;
public function __construct(FileManager $fileManager)
{
$this->_fileManager = $fileManager;
}
public function getSubscribedEvents()
{
return [
Events::prePersist,
];
}
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
if ($entity instanceof Teacher) {
$file = $entity->getAvatar();
$filename = $this->_fileManager->uploadFile($file);
$entity->setAvatar($filename);
}
}
}
Я использую FileManager.php , чтобы задать имя, расширение и каталог дляизображение для загрузки.Также FileManager.php используется для загрузки изображения.
FileManager.php
namespace App\Utils;
use Psr\Container\ContainerInterface;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class FileManager
{
public function __construct(ContainerInterface $container)
{
$this->_container = $container;
}
public function uploadFile(UploadedFile $uploadedFile )
{
if($uploadedFile instanceof UploadedFile)
{
$filename = $this->generateUniqueName() . '.' . $uploadedFile->guessExtension();
$uploadedFile->move(
$this->getTargetDirectory(),
$filename
);
return $filename;
}
}
private function generateUniqueName()
{
return md5(uniqid());
}
public function getTargetDirectory()
{
return $this->_container->getParameter('uploads_directory');
}
}
В prepersist (), когда загружается () FileManager.phpс параметром $ file выдает ошибку:
Аргумент 1, передаваемый в App \ Utils \ FileManager :: uploadFile (), должен быть экземпляром Symfony \ Component \ HttpFoundation \ File \ UploadedFile, заданная строка,