Этот урок по 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;
Причина в том, что ваш файл загружается и сохраняется в вашей общедоступной / загружаемой / брошюре.Но ваша база данных запоминает только строковый путь для ее достижения.
Надеюсь, это поможет!