如何以编辑形式显示图像 Symfony 5

How display image in edit form Symfony 5

我有上传文件的表格 - 它工作得很好,我将图像名称输入数据库,在主页上显示它。但是,如果我想编辑有关此图片的信息,例如带有图片的名称或描述表格行,我的图片是空的,我需要再次上传相同的照片:

edit form

项目实体:

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $page_path;

    public function getPhotoPath(): ?string
    {
        return $this->photo_path;
    }

    public function setPhotoPath(string $photo_path): self
    {
        $this->photo_path = $photo_path;

        return $this;
    }

项目表单类型:

<?php

namespace App\Form;

use App\Entity\Projects;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\FileType;

class ProjectsType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, [])
            ->add('page_path', TextType::class, [])
            ->add('description', TextType::class, [])
            ->add('photo_path', FileType::class, [
                'data_class' => null,
                'label' => 'Zdjęcie',
                'constraints' => [
                    'maxSize' => '5M',
                    'mimeTypes' => [
                        'image/*'
                    ],
                    'mimeTypesMessage' => 'Obsługiwany format pliku musi być obrazem'
                ]
            ]);
          
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Projects::class,
        ]);
    }
}

查看:

{% extends 'baseAdmin.html.twig' %}

{% block title %}{{ parent() }}New/Edit
{% endblock %}

{% block body %}
<div class="card-body">
    
    {% form_theme projectsForm 'bootstrap_4_layout.html.twig' %}
    {{ form_start(projectsForm) }}
    {{ form_row(projectsForm.name) }}
    {{ form_row(projectsForm.page_path) }}
    {{ form_row(projectsForm.description) }}
    {{ form_row(projectsForm.photo_path) }}


    <button type="submit" class="btn btn-primary mb-5">Submit</button>
    {{ form_end(projectsForm) }}
</div>
{% endblock %}

编辑实体时文件输入应为空,这是默认行为。要使其在编辑中需要 false,您可以使用添加这个简单的解决方案。

'required'=> is_null($builder->getData()->getId())

如果你上传一张新图片,它应该替换旧的,否则什么都不做。 如果你想显示图像,你可以直接在树枝中使用 <img> 标签