auresbug/media

v0.6.1 2022-05-06 04:15 UTC

This package is auto-updated.

Last update: 2024-09-29 06:09:05 UTC


README

这是一个从 optix/media 分支出来的包

安装

您可以通过 composer 安装此包

composer require auresbug/media

安装后,您应该发布提供的资产以创建必要的迁移和配置文件。

php artisan vendor:publish --provider="Auresbug\Media\MediaServiceProvider"

关键概念

在继续之前,您应该了解以下关键概念

  • 媒体可以是任何类型的文件,从 jpeg 到 zip 文件。在尝试上传文件之前,您应该在应用程序的验证逻辑中指定任何文件限制。

  • 媒体作为自己的实体上传。创建时它不属于系统中的另一个模型,因此项目可以独立管理(这使得它成为媒体管理器的完美引擎)。

  • 媒体必须附加到模型才能建立关联。

  • 媒体项绑定到“组”。这使得将多种类型的媒体与模型相关联变得容易。例如,一个模型可能有一个“图像”组和“文档”组。

  • 您可以使用转换来操作图像。您可以在媒体项与模型关联时指定要执行的转换。例如,您可以为模型“相册”组注册一个“缩略图”转换。

  • 转换是在全局范围内注册的。这意味着它们可以在您的应用程序中重复使用,即 Post 和 User 可以有相同尺寸的缩略图,而不必注册两次相同的转换。

用法

上传媒体

您应该使用 Auresbug\Media\MediaUploader 类来处理文件上传。

默认情况下,此类将更新到媒体配置中指定的磁盘上的文件。它将它们保存为原始文件名的净化版本,并在数据库中创建一个包含文件详细信息的媒体记录。

您还可以在上传之前自定义文件的一些属性。

$file = $request->file('file');

// Default usage
$media = MediaUploader::fromFile($file)->upload();

// Custom usage
$media = MediaUploader::fromFile($file)
    ->useFileName('custom-file-name.jpeg')
    ->useName('Custom media name')
    ->upload();

将媒体与模型关联

为了将媒体项与模型关联,您必须首先包含 Auresbug\Media\HasMedia 特性。

class Post extends Model
{
    use HasMedia;
}

此特性将设置您的模型与媒体模型之间的关系。其主要目的是提供一个流畅的 API 来附加和检索媒体。

一旦包含,您就可以按照以下方式将媒体附加到模型上。附加媒体方法的第一个参数可以是媒体模型实例、ID 或模型/ID的可迭代列表。

$post = Post::first();

// To the default group
$post->attachMedia($media);

// To a custom group
$post->attachMedia($media, 'custom-group');

将媒体从模型中取消关联

要取消媒体与模型的关联,您应该调用提供的 detachMedia 方法。

// Detach all the media
$post->detachMedia();

// Detach the specified media
$post->detachMedia($media);

// Detach all the media in a group
$post->clearMediaGroup('your-group');

如果您想删除媒体项,您应该像处理应用程序中的任何其他模型一样进行。

Media::first()->delete();

这样做将删除文件从您的文件系统,并删除媒体项与您的应用程序模型之间的任何关联。

检索媒体

HasMedia 特性的另一个功能是检索媒体。

// All media in the default group
$post->getMedia();

// All media in a custom group
$post->getMedia('custom-group');

// First media item in the default group
$post->getFirstMedia();

// First media item in a custom group
$post->getFirstMedia('custom-group');

除了检索媒体项之外,您还可以直接从模型中检索媒体模型的属性。

// Url of the first media item in the default group
$post->getFirstMediaUrl();

// Url of the first media item in a custom group
$post->getFirstMediaUrl('custom-group');

操作图像

此包提供了一种流畅的 API 来操作图像。您可以在媒体与组关联时指定要执行的“转换”。它使用熟悉的 intervention/image 库,因此可以使用库提供的所有选项来操作图像。

要开始使用,您首先需要在应用程序的服务提供商中注册一个转换。

use Intervention\Image\Image;
use Auresbug\Media\Facades\Conversion;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Conversion::register('thumb', function (Image $image) {
            return $image->fit(64, 64);
        });
    }
}

注册转换后,您应该配置一个媒体组,以便在媒体附加到您的模型时执行转换。

class Post extends Model
{
    use HasMedia;

    public function registerMediaGroups()
    {
        $this->addMediaGroup('gallery')
             ->performConversions('thumb');
    }
}

现在,当媒体项目附加到“相册”组时,将生成一个转换后的图像。您可以按照以下示例获取转换后图像的URL。

// The thumbnail of the first image in the gallery group
$post->getFirstMediaUrl('gallery', 'thumb');

为什么使用这个包?

已经存在一些包可以解决与这个包构建的类似问题。

其中最受欢迎的是

本包与上述包之间有几个关键差异。我们的包是为支持媒体管理器并简化图像处理而构建的。以下比较表可以更好地体现这一点:

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件