对不起,我的英语不好。
在表单中,我使用ImageField (Esasyadmin3),如下所示:
$img = ImageField::new('img')
->setBasePath('images)
->setUploadDir('public/images)
->setUploadedFileNamePattern('[name].[extension]')
->setRequired(false)
;目标是从“public/images”文件夹中选择一个镜像。但是,如果我决定更改此图像,它将删除我先前从文件夹中选择的图像。我不想要这种行为,因为我的图像可以在其他地方使用。如何防止这种删除?我是否选择了正确的控件类型?谢谢
发布于 2021-01-18 02:15:18
很抱歉延迟了,但请使用以下命令:
$img=ImageField::new('img')
->setBasePath('images')
->setUploadDir('public/images')
->setUploadedFileNamePattern("$name.[extension]")
->setRequired(false);发布于 2021-04-26 23:13:49
再一次,很抱歉延迟了,但我认为分享一些关于这个问题的东西是有用的。
我也遇到了同样的问题,我希望在上传新图像时阻止默认图像删除过程。我尝试了许多不同的方法,最终找出了问题所在。
首先,您可以覆盖图像的默认类型。使用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。
https://stackoverflow.com/questions/65288121
复制相似问题