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