我正在尝试为Cafe实体创建表单。Symfony窗体:上传的图像没有以编辑的形式显示
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设置为Cafe实体的$image
属性。
创建咖啡厅工作正常。但是当我尝试编辑咖啡厅时,上传输入是空的。所以,当我点击保存,旧图像被删除。每当我想编辑咖啡馆时,我都需要上传图片。我怎样才能保持图像文件的编辑形式?
感谢您的解决方案!你能帮我解决这个问题:在编辑窗体中可以显示当前的图像路径吗?以便用户知道已经有一些图像 – blahblah
您可以手动输出此表单http://symfony.com/doc/current/form/form_customization.html。或者添加只读字段'image',我已经更新了我的答案。 –