【问题标题】:Symfony 5, EasyAdmin3 : Field ImageField, How not to delete?Symfony 5,EasyAdmin3:字段 ImageField,如何不删除?
【发布时间】:2020-12-14 11:20:38
【问题描述】:

对不起,我的英语不好。

在一个表单中,我像这样使用 ImageField (esasyadmin 3):

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

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

【问题讨论】:

  • “更改此图像”是什么意思?您是在更改图像文件,还是在尝试将不同的图像上传到 img 属性?

标签: php symfony imagefield easyadmin


【解决方案1】:

抱歉耽搁了,但请使用这个:

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

【讨论】:

    【解决方案2】:

    再次,抱歉耽搁了,但我认为分享一些有关此问题的信息会很有用。

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

    首先,您可以覆盖图像的默认类型。使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 2019-04-21
      • 2022-01-16
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      相关资源
      最近更新 更多