Я пытаюсь создать форму для объекта Cafe.Symfony form: Загруженное изображение не отображается в форме редактирования
Cafe.php
class Cafe{
/**
* @var string $image
* @Assert\File(maxSize = "1024k", mimeTypesMessage = "Please upload a valid Image")
* @ORM\Column(name="image", type="string", length=255, nullable=true)
*/
private $image;
}
CafeType.php
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, array('label' => 'Name'))
->add('image', FileType::class, array(
'label' => 'Image',
'data_class' => null,
'required' => false
))
;
}
CafeController.php
public function editAction(Request $request, Cafe $cafe)
{
$editForm = $this->createForm('AdminBundle\Form\CafeType', $cafe);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$img = $editForm['image']->getData();
if($img){
$fileLocation = $this->get('app.s3_file_uploader')->putFileToBucket($img, 'cafe-images/'.uniqid().'/cafe-image');
$cafe->setImage($fileLocation);
}
$em = $this->getDoctrine()->getManager();
$em->persist($cafe);
$em->flush();
return $this->redirectToRoute('cafe_index');
}
return $this->render('AdminBundle:Cafe:edit.html.twig', array(
'cafe' => $cafe,
'edit_form' => $editForm->createView()
));
}
В контроллере я использую пользовательский сервис для сохранения изображения в S3 ведро, который возвращает изображение местоположения fileLocation. И затем я установил этот файл url в $image
свойство Cafe entity.
Создание кафе отлично работает. Но когда я пытаюсь редактировать кафе, загрузка ввода пуста. Поэтому, когда я нажимаю «Сохранить», старое изображение удаляется. Мне нужно загружать iamge каждый раз, когда я хочу редактировать кафе. Как сохранить файл изображения в форме редактирования?
Спасибо за решение! Не могли бы вы помочь мне в этом: в форме редактирования можно показать текущий путь к изображению? так что пользователь знает, что уже есть какое-то изображение. – blahblah
Вы можете вывести эту форму вручную http://symfony.com/doc/current/form/form_customization.html. Или добавьте поле readonly 'image', я обновил свой ответ. –