waad / media
将媒体添加到您的 Laravel 应用程序的一个地方
v3.0.2
2023-12-24 10:18 UTC
Requires
- php: ^8.0
This package is auto-updated.
Last update: 2024-09-05 12:59:56 UTC
README
🔥 媒体文件包
一个包,可以将您的文件保存到多个磁盘和多个目录中,具有相同的模型
❤️ 作者
⚠️ 最小要求
* 版本 >= 2.0.0
- PHP >= 8.0.0
- Laravel 8, 9, 10
* 版本 < 2.0.0
- PHP 7.4
- Laravel 7, 8
💯 安装
要安装
composer require waad/media
首先 : 使用以下命令发布 config
php artisan vendor:publish --provider="Waad\Media\MediaServiceProvider" --tag="media-config"
确保从 config/media.php
中配置 uuid
和 shortcut
⚠️ 清除缓存在发布迁移之前非常重要
php artisan optimize
其次 : 使用以下命令发布 migrations
php artisan vendor:publish --provider="Waad\Media\MediaServiceProvider" --tag="media-migrations"
您可以迁移
php artisan migrate
您可以通过从 config.media.shortcut
数组中指定磁盘来创建链接快捷方式
'shortcut' => [ 'public' => 'media', // disk => shortcut name ],
php artisan media:link
🧰 使用/示例
在 模型 中
<?php namespace App\Models; use Waad\Media\Traits\HasOneMedia; // or use Waad\Media\Traits\HasManyMedia; class Post extends Model { use HasOneMedia; <<------ return one last record of media // or use HasManyMedia; <<------ return list of media // $media_disk // $media_directory // if not define will get default `disk,directory` in `config/media.php` public $media_disk = 'public'; public $media_directory = 'posts/images'; ......
您可以获取媒体
$post->media;
上传文件
例如。在控制器store
方法中使用,以添加一个或多个文件
$post = Post::create([ ........... ]); $files = $request->file('image'); // one image $files = $request->file('images'); // many images // version < 2 // will return an array of file names $media = $post->addMedia($files); $media = $post->addMedia($files, $index = 1, $label = 'cover'); // *************************************************** // version >= 2 // will return the Media model or array of Media models on the Relationship $media = $post->addMedia($files)->upload(); $media = $post->addMedia($files)->label('cover')->index(3)->upload(); $media = $post->addMedia($files)->disk('public')->directory('posts/video')->label('cover')->index(3)->upload(); return $media;
同步文件
例如。在控制器update
方法中使用,以添加一个或多个文件
$post = Post::find(1); $post->update([ ........... ]); $files = $request->file('image'); // one image $files = $request->file('images'); // many images // version < 2 // will return an array of file names $media = $post->syncMedia($files); $media = $post->syncMedia($files, $index = 2); // *************************************************** // version >= 2 // will return the Media model or array of Media Models on the Relationship $media = $post->syncMedia($files)->sync(); $media = $post->syncMedia($files, $ids = [1,3])->sync(); // delete only these $ids and upload new files $media = $post->syncMedia($files)->label('cover')->index(3)->sync(); $media = $post->syncMedia($files)->disk('public')->directory('posts/video')->label('cover')->index(3)->sync(); return $media;
删除文件
例如。在控制器destroy
方法中使用,以删除所有或特定 id
$post = Post::find(1); // version < 2 // will return an array of file names $media = $post->deleteMedia($files); $media = $post->deleteMedia($files, $index = 2); // *************************************************** // version >= 2 // will return a bool or array of bool or null by on Relationship $media = $post->deleteMedia()->delete(); $media = $post->deleteMedia($medias_model)->delete(); $media = $post->deleteMedia([1,3])->delete(); // delete only these ids $lastMedia = $post->media->last(); // return Collection Media Model $media = $post->deleteMedia($lastMedia)->delete(); // delete only this media $media2 = $post->mediaById(8); $media = $post->deleteMedia($media2)->delete(); $mediaList = $post->mediaByMimeType('image/png'); $media = $post->deleteMedia($mediaList)->delete(); $post->delete();
- 其他辅助
仅版本 >= 2
// get sum files size of post object (bytes) $post->mediaTotalSize(); //********************************************** // get count media of post object $post->mediaTotalCount(); // get count media with soft delete of post object $post->mediaTotalCount($withTrashed = true); //********************************************** // get media by id of the post object $post->mediaById(17); // get media with soft delete by id of the post object $post->mediaById(17, $withTrashed = true); //********************************************** // get media by mime_type of post object $post->mediaByMimeType('image/png'); // get media with soft delete by mime_type of the post object $post->mediaByMimeType('image/png', $withTrashed = true); //********************************************** // get media by approved boolean of the post object $post->mediaApproved(); // default true $post->mediaApproved(false); // get media with soft delete by approved boolean of the post object $post->mediaApproved(false, $withTrashed = true);
- 您可以更新对象的全部媒体的
approved
$post->media->approve(); // put approved = true $post->media->disApprove(); // put approved = false
- 您可以获取上传该媒体的用户
// if was HasOneMedia 1 - optional($post->media)->user; 2 - Post::with('media.user')->find(1); //********************************************** // if was HasManyMedia 1 - Post::with('media.user')->get(); 2 - $post->media->load('user');
🎀 范围
您可以获取仅批准等于 true 的内容
$post->media->approved(); // approved = true
🍔 永久删除文件
从 config/media.php
中确定 delete_file_after_day
必须是整数
⭕️ 将命令添加到项目的 crontab 中以自动执行
在 app/Console/Kernel.php
中添加此命令
protected function schedule(Schedule $schedule) { // ..................... $schedule->command('media:prune')->daily(); }
⭕️ 手动实现
php artisan media:prune