Мне не удалось получить пример для загрузки файла в https://symfony.com/doc/current/controller/upload_file.html для работы.Я изменил ваш код, чтобы он выглядел больше как какой-то код, который я получил для работы.Приведенный ниже код не был протестирован, но должен приблизить вас к работе.
поле сущности:
/**
* @ORM\Column(type="string", length=255)
*
*/
private $image;
// Note there is no type hint on the return value.
// Sometimes it is a string, sometimes a UploadedFile.
// php bin/console make:entity adds a type hint which must be removed.
public function getImage()
{
return $this->image;
}
public function setImage($image): self
{
$this->image = $image;
return $this;
}
тип формы для создания сущности:
public function buildForm(FormBuilderInterface $builder, array
$options)
{
$builder->add('title', TextType::class, [
"label" => "Title"
])
->add('image', FileType::class)
->add('save', SubmitType::class, array("label" => "Save"));
}
Форма GalleryEditTypeтип для редактирования объекта: (я не знаю, как создать комбинированную форму для создания / редактирования.)
public function buildForm(FormBuilderInterface $builder, array
$options)
{
$builder->add('title', TextType::class, [
"label" => "Title"
])
->add('image', FileType::class, [
'required' => false,
'mapped' => false
])
->add('save', SubmitType::class, array("label" => "Save"));
}
контроллер: (я менее уверен в этом коде, но вам определенно нужна подсказка типа UploadedFileниже.)
public function editAction(Request $request, Gallery $gallery)
{
$em = $this->getDoctrine()->getManager();
$form = $this->createForm(GalleryEditType::class, $gallery);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// $file stores the uploaded image file.
/** @var Symfony\Component\HttpFoundation\File\UploadedFile $file */
$file = $form->get('image')->getData();
if ($file != null) {
// The user selected a new image.
$fileName = $this->generateUniqueFileName() . '.' . $file->guessExtension();
// Move the file to the directory where brochures are stored
try {
$file->move(
$this->getParameter('brochures_directory'),
$fileName
);
} catch (FileException $e) {
}
// Update the image property to store the image file name instead of its contents.
$gallery->setImage($fileName);
}
$em->persist($gallery);
$em->flush();
return $this->redirectToRoute('gallery_index', [
'id' => $gallery->getId(),
]);
}
return $this->render('Gallery/edit.html.twig', [
'form' => $form->createView(),
'gallery' => $gallery,
]);
}
Пожалуйста, опубликуйте обновленный код, когда он заработает.Спасибо!