waseet/spatie-laravel-mongo-media-library-plugin

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

dev-master 2024-09-10 14:23 UTC

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')