r94ever / laravel-media
Requires
- php: ^8.0.1
- intervention/image: ^2.5
- laravel/framework: ~5.8.0|^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- mockery/mockery: ^1.4.4
- orchestra/testbench: ~3.8.6|^4.8|^5.2|^6.0
This package is auto-updated.
Last update: 2024-09-12 12:11:01 UTC
README
一个简单的方法,可以将文件附加到你的Eloquent模型中,内置了图像处理功能!
安装
您可以通过composer安装此包
composer require r94ever/laravel-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)。请参阅许可证文件以获取更多信息。