waseet / spatie-laravel-mongo-media-library-plugin
对 `spatie/laravel-medialibrary` 的 Filament 支持。
Requires
- php: ^8.1
- illuminate/support: ^10.45|^11.0
- waseet/laravel-mongo-medialibrary: dev-master
This package is auto-updated.
Last update: 2024-09-10 14:23:45 UTC
README
安装
使用 Composer 安装插件
composer require filament/spatie-laravel-media-library-plugin:"^3.2" -W
如果您还没有这样做,您需要发布迁移来创建媒体表
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-migrations"
运行迁移
php artisan migrate
您还必须准备您的 Eloquent 模型以附加媒体。
有关更多信息,请参阅Spatie 的文档。
表单组件
您可以使用该字段与原始文件上传字段相同的方式
use Filament\Forms\Components\SpatieMongoMediaLibraryFileUpload; SpatieMongoMediaLibraryFileUpload::make('avatar')
媒体库文件上传支持原始文件上传组件的所有自定义选项。
字段将自动将上传加载并保存到您的模型中。要设置此功能,您还必须遵循设置表单模型部分中的说明。如果您使用的是面板,您可以跳过此步骤。
传递集合
可选地,您可以通过传递 collection()
将文件分组到类别中
use Filament\Forms\Components\SpatieMongoMediaLibraryFileUpload; SpatieMongoMediaLibraryFileUpload::make('avatar') ->collection('avatars')
配置存储磁盘和目录
默认情况下,文件将公开上传到您在 Filament 配置文件 中定义的存储磁盘。您还可以设置 FILAMENT_FILESYSTEM_DISK
环境变量来更改此设置。这是为了确保所有 Filament 包之间的一致性。除非您为注册的集合定义磁盘,否则不会使用 Spatie 的磁盘配置。
或者,您可以使用 disk()
方法手动设置磁盘
use Filament\Forms\Components\FileUpload; FileUpload::make('attachment') ->disk('s3')
基本文件上传组件还提供了配置选项来设置上传文件的 directory()
和 visibility()
。这些选项不用于媒体库文件上传组件。Spatie 的包有其自己的系统来确定新上传文件的目录,并且默认不支持上传私有文件。存储私有文件的一种方法是配置您的 S3 存储桶设置,在这种情况下,您还应该使用 visibility('private')
来确保 Filament 为您的文件生成临时 URL。
重新排序文件
除了普通文件上传的行为之外,Spatie 的媒体库还允许用户重新排序文件。
要启用此行为,请使用 reorderable()
方法
use Filament\Forms\Components\SpatieMongoMediaLibraryFileUpload; SpatieMongoMediaLibraryFileUpload::make('attachments') ->multiple() ->reorderable()
现在您可以将文件拖放到顺序中。
添加自定义属性
您可以在使用 customProperties()
方法上传文件时传递 自定义属性
use Filament\Forms\Components\SpatieMongoMediaLibraryFileUpload; SpatieMongoMediaLibraryFileUpload::make('attachments') ->multiple() ->customProperties(['zip_filename_prefix' => 'folder/subfolder/'])
添加自定义头信息
您可以在使用 customHeaders()
方法上传文件时传入自定义头信息。
use Filament\Forms\Components\SpatieMongoMediaLibraryFileUpload; SpatieMongoMediaLibraryFileUpload::make('attachments') ->multiple() ->customHeaders(['CacheControl' => 'max-age=86400'])
生成响应式图片
当文件使用 responsiveImages()
方法上传时,您可以生成响应式图片。
use Filament\Forms\Components\SpatieMongoMediaLibraryFileUpload; SpatieMongoMediaLibraryFileUpload::make('attachments') ->multiple() ->responsiveImages()
使用转换
您还可以指定一个 conversion()
,以便在文件从表单中显示时加载它。
use Filament\Forms\Components\SpatieMongoMediaLibraryFileUpload; SpatieMongoMediaLibraryFileUpload::make('attachments') ->conversion('thumb')
在单独的磁盘上存储转换
您可以将转换和响应式图片存储在保存原始文件的磁盘之外。将想要存储转换的磁盘名称传递给 conversionsDisk()
方法。
use Filament\Forms\Components\SpatieMongoMediaLibraryFileUpload; SpatieMongoMediaLibraryFileUpload::make('attachments') ->conversionsDisk('s3')
存储媒体特定操作
您可以通过 manipulations()
方法传入操作,这些操作在文件上传时执行。
use Filament\Forms\Components\SpatieMongoMediaLibraryFileUpload; SpatieMongoMediaLibraryFileUpload::make('attachments') ->multiple() ->manipulations([ 'thumb' => ['orientation' => '90'], ])
过滤媒体
您可以针对文件上传组件进行过滤,使其仅处理集合中的一部分媒体。为此,您可以使用 filterMediaUsing()
方法过滤媒体集合。此方法接受一个函数,该函数接收 $media
集合并进行操作。您可以使用任何 集合方法 进行过滤。
例如,您可以仅针对具有特定自定义属性的媒体字段进行限制。
use Filament\Forms\Components\SpatieMongoMediaLibraryFileUpload; use Filament\Forms\Get; use Illuminate\Support\Collection; SpatieMongoMediaLibraryFileUpload::make('images') ->customProperties(fn (Get $get): array => [ 'gallery_id' => $get('gallery_id'), ]) ->filterMediaUsing( fn (Collection $media, Get $get): Collection => $media->where( 'custom_properties.gallery_id', $get('gallery_id') ), )
表列
要使用媒体库图片列
use Filament\Tables\Columns\SpatieMongoMediaLibraryImageColumn; SpatieMongoMediaLibraryImageColumn::make('avatar')
传递集合
可选地,您还可以传递一个 collection()
use Filament\Tables\Columns\SpatieMongoMediaLibraryImageColumn; SpatieMongoMediaLibraryImageColumn::make('avatar') ->collection('avatars')
集合 允许您将文件分组到类别中。
默认情况下,只有未指定集合的媒体(使用 default
集合)会被显示。如果您想显示来自所有集合的媒体,可以使用 allCollections()
方法。
use Filament\Tables\Columns\SpatieMongoMediaLibraryImageColumn; SpatieMongoMediaLibraryImageColumn::make('avatar') ->allCollections()
使用转换
您还可以指定一个 conversion()
,以便在表单中显示文件时加载它(如果存在)。
use Filament\Tables\Columns\SpatieMongoMediaLibraryImageColumn; SpatieMongoMediaLibraryImageColumn::make('avatar') ->conversion('thumb')
信息列表条目
要使用媒体库图片条目
use Filament\Infolists\Components\SpatieMongoMediaLibraryImageEntry; SpatieMongoMediaLibraryImageEntry::make('avatar')
传递集合
可选地,您还可以传递一个 collection()
use Filament\Infolists\Components\SpatieMongoMediaLibraryImageEntry; SpatieMongoMediaLibraryImageEntry::make('avatar') ->collection('avatars')
集合 允许您将文件分组到类别中。
默认情况下,只有未指定集合的媒体(使用 default
集合)会被显示。如果您想显示来自所有集合的媒体,可以使用 allCollections()
方法。
use Filament\Infolists\Components\SpatieMongoMediaLibraryImageEntry; SpatieMongoMediaLibraryImageEntry::make('avatar') ->allCollections()
使用转换
您还可以指定一个 conversion()
,以便在信息列表中显示文件时加载它(如果存在)。
use Filament\Infolists\Components\SpatieMongoMediaLibraryImageEntry; SpatieMongoMediaLibraryImageEntry::make('avatar') ->conversion('thumb')