auresbug / media
Requires
- php: ^7.3|^8.0
- intervention/image: ^2.5
- laravel/framework: ~5.8.0|^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- laravel/legacy-factories: ^1.0.4
- mockery/mockery: ^1.2.3
- orchestra/testbench: ~3.8.6|^4.8|^5.2|^6.0
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)。有关更多信息,请参阅许可证文件。