Symfony 5,EasyAdmin3:字段ImageField,如何不删除



对不起我的英语。

在一个表单中,我使用ImageField(esasyadmin 3(,如下所示:

$img = ImageField::new('img')
->setBasePath('images)
->setUploadDir('public/images)
->setUploadedFileNamePattern('[name].[extension]')
->setRequired(false)
;

目标是从"public/images"文件夹中选择一个图像。但是,如果我决定更改此图像,它会从文件夹中删除我以前选择的图像。我不想要这种行为,因为我的图像可以在其他地方使用。如何防止此删除?我选择了正确的控制类型吗?谢谢

再次对延迟表示抱歉,但我认为分享一些关于这个问题的信息是有用的。

我也遇到了同样的问题,我想在上传新图像时阻止默认的图像删除过程。我尝试了许多不同的方法,终于弄清楚问题出在哪里。

首先,您可以覆盖图像的默认类型。使用setFormType方法,可以将ImageField设置为FileUploadType,如下例所示:

public function configureFields(string $pageName): iterable
{
return [
...
ImageField::new('image')
->setFormType(FileUploadType::class)
...
}

然后,如果您仔细查看configureOptions方法上的FileUploadType,您将看到一些可以被覆盖的参数。

$resolver->setDefaults([
'upload_dir' => $this->projectDir.'/public/uploads/files/',
'upload_new' => $uploadNew,
'upload_delete' => $uploadDelete,
'upload_filename' => $uploadFilename,
'upload_validate' => $uploadValidate,
'download_path' => $downloadPath,
'allow_add' => $allowAdd,
'allow_delete' => true,
'data_class' => $dataClass,
'empty_data' => $emptyData,
'multiple' => false,
'required' => false,
'error_bubbling' => false,
'allow_file_upload' => true,
]);

最后需要做的是覆盖upload_delete选项的默认功能。现在您只需要使用函数setFormTypeOption来覆盖这个可调用函数,如下所示:

public function configureFields(string $pageName): iterable
{
return [
...
ImageField::new('image')
->setFormType(FileUploadType::class)
->setFormTypeOption('allow_delete', false)
->setFormTypeOption('upload_delete', function(File $file) {})
...
}

也可以使用相同的方法将allow_delete设置为false

很抱歉延迟,但请使用以下内容:

$img=ImageField::new('img')
->setBasePath('images')
->setUploadDir('public/images')
->setUploadedFileNamePattern("$name.[extension]")
->setRequired(false);

最新更新