跳到内容

EasyAdmin 图片字段

编辑此页

此字段用于管理向后端上传图片。实体属性仅存储图片的路径,而非其二进制内容,二进制内容存储在文件中。

表单页面(编辑和新建) 中,它看起来像这样

Default style of EasyAdmin image field

基本信息

  • PHP Class: EasyCorp\Bundle\EasyAdminBundle\Field\ImageField
  • Doctrine DBAL Type used to store this value: string
  • Symfony Form Type used to render the field: FileUploadType, a custom form type created by EasyAdmin
  • 渲染为:

    1
    2
    <!-- when loading the page this is transformed into a dynamic widget via JavaScript -->
    <input type="file">

选项

setBasePath

默认情况下,图片在只读页面(indexdetail)中“按原样”加载,不会更改其路径。如果你的图片在某个路径下提供服务(例如 uploads/images/),请使用此选项进行配置

1
yield ImageField::new('...')->setBasePath('uploads/images/');

setUploadDir

默认情况下,上传图片的內容存储在 <your-project-dir>/public/uploads/images/ 目录中的文件中。使用此选项可以更改该位置。参数是相对于项目根目录的目录

1
yield ImageField::new('...')->setUploadDir('assets/images/');

setFileConstraints

默认情况下,上传的文件使用空的 Image 约束进行验证(这意味着它仅验证上传的文件是否为图片类型)。使用此选项可以定义应用于上传文件的约束

1
yield ImageField::new('...')->setFileConstraints(new Image(maxSize: '100k'));

setUploadedFileNamePattern

默认情况下,上传的图片与原始文件使用相同的文件名和扩展名存储。使用此选项可以在上传后重命名图片文件。作为参数传递的字符串模式可以包含以下特殊值

  • [day],当前日期的日部分(通过 date('d') 获取)
  • [month],当前日期的月部分(通过 date('m') 获取)
  • [year],当前日期的年部分(通过 date('Y') 获取)
  • [timestamp],当前时间戳(通过 time() 获取)
  • [name],上传文件的原始名称
  • [slug],上传文件原始名称的 slug(使用 Symfony 的 String 组件生成)
  • [extension],上传文件的原始扩展名(例如 png
  • [contenthash],原始文件内容的 SHA1 哈希值
  • [randomhash],与原始文件内容无关的随机哈希值
  • [uuid],随机 UUID v4 值(使用 Symfony 的 Uid 组件生成)
  • [ulid],随机 ULID 值(使用 Symfony 的 Uid 组件生成)

你可以以任何方式组合它们

1
yield ImageField::new('...')->setUploadedFileNamePattern('[year]/[month]/[day]/[slug]-[contenthash].[extension]');

此方法的参数也接受一个闭包,该闭包接收 Symfony 的 UploadedFile 实例作为其第一个参数

1
2
3
yield ImageField::new('...')->setUploadedFileNamePattern(
    fn (UploadedFile $file): string => sprintf('upload_%d_%s.%s', random_int(1, 999), $file->getFilename(), $file->guessExtension()))
);
本作品,包括代码示例,均在 Creative Commons BY-SA 3.0 许可下获得许可。
目录
    版本