shm379 / media
Requires
- php: 7.3|^8.0.2|^8.1
- intervention/image: ^2.5
- laravel/framework: ~5.8.0|^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- mockery/mockery: ^1.2.3
- orchestra/testbench: ~3.8.0|^4.0|^5.0
This package is not auto-updated.
Last update: 2024-09-28 15:28:53 UTC
README
一个简单的方法将文件附加到你的eloquent模型中,内置图片处理功能!
安装
您可以通过composer安装此包
composer require shm379/media
安装完成后,您应该发布提供的资源,以创建必要的迁移和配置文件。
php artisan vendor:publish --provider="Shm379\Media\MediaServiceProvider"
关键概念
在继续之前,应该了解一些关键概念
-
媒体可以是任何类型的文件,从jpeg到zip文件。在尝试上传文件之前,您应该在应用程序的验证逻辑中指定任何文件限制。
-
媒体是作为其自身的实体上传的。在创建时,它不属于系统中的另一个模型,因此项目可以独立管理(这使得它成为媒体管理器的完美引擎)。
-
媒体必须附加到模型才能建立关联。
-
媒体项目绑定到“组”。这使得将多种类型的媒体关联到模型变得容易。例如,一个模型可能有一个“图像”组和“文档”组。
-
您可以使用转换来处理图像。当媒体项目与模型关联时,您可以指定要执行的转换。例如,您可以为模型“相册”组中的图像注册一个“缩略图”转换。
-
转换是全局注册的。这意味着它们可以在您的应用程序中重用,例如,Post和User可以具有相同尺寸的缩略图,而无需注册两次相同的转换。
用法
上传媒体
您应该使用 Shm379\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();
将媒体与模型关联
为了将媒体项目与模型关联,您必须首先包含 Shm379\Media\HasMedia
特性。
class Post extends Model { use HasMedia; }
此特性将设置您的模型与媒体模型之间的关系。其主要目的是提供一个流畅的API来附加和检索媒体。
一旦包含,您就可以像下面演示的那样将媒体附加到模型上。附加媒体方法的第一参数可以是媒体模型实例、id或模型/ids的可迭代列表。
$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 Shm379\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)。有关更多信息,请参阅许可证文件。