Как передать экземпляр Symfony \ Component \ HttpFoundation \ File \ UploadedFile, когда у меня есть строковое значение? - PullRequest
0 голосов
/ 02 апреля 2019

Я изучаю события в 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, заданная строка,

...