Symfony 4 Загрузить

Как загрузить файл в 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;
    }
} 

Я получаю ошибку в этой строке $ fileName = md5 (uniqid ()). '.'. $ File-> guessExtension ();

viveka 31.05.2018 08:43

Файл загружается, но отображается эта ошибка .. Файл "/ tmp / phpoblzuA" не существует

viveka 04.06.2018 09:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
560
1

Ответы 1

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

Итак, сначала вам нужно создать службу FileUploader в App \ Service для лучшего повторного использования (глава: Создание службы загрузки). Вы можете скопировать / вставить здесь то, что они сделали, это работает как шарм. Затем вам нужно открыть свой 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 вам нужно указать, что Brochure будет FileType:

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

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

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

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

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

Другие вопросы по теме