filament/spatie-laravel-media-library-plugin

支持 `spatie/laravel-medialibrary` 的 Filament。

v3.2.113 2024-07-24 12:10 UTC

This package is auto-updated.

Last update: 2024-09-17 08:30:40 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\SpatieMediaLibraryFileUpload;

SpatieMediaLibraryFileUpload::make('avatar')

媒体库文件上传支持原始文件上传组件的所有自定义选项。

字段将自动将上传加载到您的模型并保存。要设置此功能,您还必须遵循 设置表单模型 部分的说明。如果您使用的是 面板,则可以跳过此步骤。

传递集合

可选地,您可以通过 collection() 将文件分组到类别中

use Filament\Forms\Components\SpatieMediaLibraryFileUpload;

SpatieMediaLibraryFileUpload::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\SpatieMediaLibraryFileUpload;

SpatieMediaLibraryFileUpload::make('attachments')
    ->multiple()
    ->reorderable()

您现在可以拖放文件以排序。

添加自定义属性

您可以在使用 customProperties() 方法上传文件时传递 自定义属性

use Filament\Forms\Components\SpatieMediaLibraryFileUpload;

SpatieMediaLibraryFileUpload::make('attachments')
    ->multiple()
    ->customProperties(['zip_filename_prefix' => 'folder/subfolder/'])

添加自定义头信息

您可以在使用 customHeaders() 方法上传文件时传递自定义头信息。

use Filament\Forms\Components\SpatieMediaLibraryFileUpload;

SpatieMediaLibraryFileUpload::make('attachments')
    ->multiple()
    ->customHeaders(['CacheControl' => 'max-age=86400'])

生成响应式图片

当使用 responsiveImages() 方法上传文件时,您可以生成响应式图片。[了解更多](https://spatie.be/docs/laravel-medialibrary/responsive-images/getting-started-with-responsive-images)

use Filament\Forms\Components\SpatieMediaLibraryFileUpload;

SpatieMediaLibraryFileUpload::make('attachments')
    ->multiple()
    ->responsiveImages()

使用转换

如果您需要从表单中加载文件,也可以指定一个 conversion()

use Filament\Forms\Components\SpatieMediaLibraryFileUpload;

SpatieMediaLibraryFileUpload::make('attachments')
    ->conversion('thumb')

在单独的磁盘上存储转换

您可以将转换和响应式图片存储在除了保存原始文件之外的其他磁盘上。将想要存储转换的磁盘名称传递给 conversionsDisk() 方法。

use Filament\Forms\Components\SpatieMediaLibraryFileUpload;

SpatieMediaLibraryFileUpload::make('attachments')
    ->conversionsDisk('s3')

存储媒体特定的操作

您可以通过 manipulations() 方法传递在文件上传时运行的 操作

use Filament\Forms\Components\SpatieMediaLibraryFileUpload;

SpatieMediaLibraryFileUpload::make('attachments')
    ->multiple()
    ->manipulations([
        'thumb' => ['orientation' => '90'],
    ])

过滤媒体

您可以将文件上传组件定位到只处理集合中的特定子集的媒体。为此,您可以使用 filterMediaUsing() 方法过滤媒体集合。此方法接受一个函数,该函数接收 $media 集合并进行操作。您可以使用任何 集合方法 来过滤它。

例如,您可以仅将字段范围限定为具有某些自定义属性的媒体

use Filament\Forms\Components\SpatieMediaLibraryFileUpload;
use Filament\Forms\Get;
use Illuminate\Support\Collection;

SpatieMediaLibraryFileUpload::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\SpatieMediaLibraryImageColumn;

SpatieMediaLibraryImageColumn::make('avatar')

媒体库图片列支持原始图片列的所有自定义选项。[了解更多](https://filamentphp.com/docs/tables/columns/image)

传递集合

可选地,您也可以传递一个 collection()

use Filament\Tables\Columns\SpatieMediaLibraryImageColumn;

SpatieMediaLibraryImageColumn::make('avatar')
    ->collection('avatars')

集合允许您将文件分组到类别中。

默认情况下,只有没有集合的媒体(使用 default 集合)将显示。如果您想显示来自所有集合的媒体,可以使用 allCollections() 方法。

use Filament\Tables\Columns\SpatieMediaLibraryImageColumn;

SpatieMediaLibraryImageColumn::make('avatar')
    ->allCollections()

使用转换

您也可以指定一个 conversion() 来从表中加载文件,如果存在的话

use Filament\Tables\Columns\SpatieMediaLibraryImageColumn;

SpatieMediaLibraryImageColumn::make('avatar')
    ->conversion('thumb')

信息列表条目

使用媒体库图片条目

use Filament\Infolists\Components\SpatieMediaLibraryImageEntry;

SpatieMediaLibraryImageEntry::make('avatar')

媒体库图片条目支持原始图片条目的所有自定义选项。[了解更多](https://filamentphp.com/docs/infolists/entries/image)

传递集合

可选地,您也可以传递一个 collection()

use Filament\Infolists\Components\SpatieMediaLibraryImageEntry;

SpatieMediaLibraryImageEntry::make('avatar')
    ->collection('avatars')

集合允许您将文件分组到类别中。

默认情况下,只有没有集合的媒体(使用 default 集合)将显示。如果您想显示来自所有集合的媒体,可以使用 allCollections() 方法。

use Filament\Infolists\Components\SpatieMediaLibraryImageEntry;

SpatieMediaLibraryImageEntry::make('avatar')
    ->allCollections()

使用转换

您也可以指定一个 conversion() 来从信息列表中加载文件,如果存在的话

use Filament\Infolists\Components\SpatieMediaLibraryImageEntry;

SpatieMediaLibraryImageEntry::make('avatar')
    ->conversion('thumb')