Symfony 4 Загрузить - PullRequest
       44

Symfony 4 Загрузить

0 голосов
/ 30 мая 2018

Как загрузить файл в Symfony 4. Я сделал с документом Symfony.Я не знаю, где я что-то пропустил.Ошибка при загрузке файла дает мне некоторые подсказки

ССЫЛКА НА ССЫЛКУ:

https://symfony.com/doc/current/controller/upload_file.html

ОШИБКА:

The file "" does not exist

Сущность

    public function getBrochure()
    {
        return $this->brochure;
    }

    public function setBrochure($brochure)
    {
        $this->brochure = $brochure;

        return $this;
    }

Загрузка файла Прослушиватель

class FileUploader
{
    private $targetDirectory;

    public function __construct($targetDirectory)
    {
        $this->targetDirectory = $targetDirectory;
    }

    public function upload(UploadedFile $file)
    {
        $fileName = md5(uniqid()).'.'.$file->guessExtension();

        $file->move($this->getTargetDirectory(), $fileName);

        return $fileName;
    }

    public function getTargetDirectory()
    {
        return $this->targetDirectory;
    }
} 

1 Ответ

0 голосов
/ 05 февраля 2019

Этот урок по Symfony отлично работает для меня, поэтому я постараюсь объяснить, как и, возможно, он поможет вам или людям, которые все еще ищут ответ, этот пост немного устарел.

Итак, сначала вам нужно создать службу FileUploader в App \ Service для лучшего повторного использования (глава: Создание службы Uploader).Вы можете в основном скопировать / вставить то, что они сделали здесь, это работает как шарм.Затем вам нужно открыть ваш services.yaml в папке Config и указать каталог вашей брошюры:

parameters:
    brochures_directory: '%kernel.project_dir%/public/uploads/brochures'
# ...
services:
    # ...

    App\Service\FileUploader:
        arguments:
            $targetDirectory: '%brochures_directory%'

Теперь все нормально готово к использованию службы FileUploader.Так что, если вы находитесь в вашем контроллере (например), я думаю, вы хотите использовать его в форме.Таким образом, вам просто нужно сделать это (не забудьте использовать вашу службу в вашем контроллере):

public function myController(FileUploader $fileUploader)
{
    // Create your form and handle it

    if ($form isValid() && &form isSubmitted()) {
        $file = $myEntity->getBrochure();
        $fileName = $this->fileUploader->upload($file);
        $myEntity->setBrochure($fileName);

        // Form validation and redirection
    }
    // Render your template
}

Один важный момент, который я забыл сказать.В вашем FormType вы должны указать, что Брошюра будет FileType:

$builder->add('brochure', FileType::class)

Но в вашей сущности вы должны указать, что ваша брошюра хранится в виде «строки»:

/**
 * @MongoDB\Field(type="string")
 */
 protected $brochure;

Причина в том, что ваш файл загружается и сохраняется в вашей общедоступной / загружаемой / брошюре.Но ваша база данных запоминает только строковый путь для ее достижения.

Надеюсь, это поможет!

...