optix/media-manager

v0.5.0 2020-10-06 13:57 UTC

This package is auto-updated.

Last update: 2024-09-13 01:32:56 UTC


README

一个简单的解决方案,可以将文件附加到eloquent模型上,并内置了图像处理功能!

Packagist Version Build Status License

安装

您可以通过composer安装此包

composer require optix/media

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

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

关键概念

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

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

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

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

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

  • 您可以使用转换来处理图像。您可以在媒体项关联到模型时指定要执行的转换。例如,您可以为模型“gallery”组中的图像附加“缩略图”转换。

  • 转换是全局注册的。这意味着它们可以在您的应用程序中重复使用,即Post和User可以拥有相同大小的缩略图,而无需注册两次相同的转换。

用法

上传媒体

您应该使用Optix\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();

将媒体与模型关联

为了将媒体项与模型关联,您必须首先包含Optix\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 Optix\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)。有关更多信息,请参阅许可证文件