anisaronno/laravel-media-gallery

0.6.0 2024-04-18 05:28 UTC

This package is auto-updated.

Last update: 2024-09-18 06:25:18 UTC


README

目录

简介

Laravel 媒体画廊简化了 Laravel 项目中的媒体和媒体文件管理。本 README 提供了安装说明、用法示例和附加信息。

安装

要开始,请使用 Composer 安装此包

composer require anisaronno/laravel-media-gallery

发布迁移和配置

对于媒体库功能,请按照以下步骤操作

发布迁移、配置

发布迁移、工厂和种子文件

php artisan vendor:publish --tag=media-migration

发布配置文件

php artisan vendor:publish --tag=media

运行迁移

应用迁移以设置媒体存储表

php artisan migrate

用法

要在任何模型(例如,用户博客、产品)中使用媒体存储,请添加 HasMedia 特性

use AnisAronno\MediaGallery\Traits\HasMedia;
use HasMedia;

Eloquent 实体工厂关系映射

对于设置具有关系映射的种子数据(例如,用户有博客,博客使用 HasMedia 特性),请在种子中使用以下代码

use App\Models\User;
use AnisAronno\MediaGallery\Database\Factories\MediaFactory;

User::factory(20)
    ->hasAttached(
        MediaFactory::new()->count(5)
    )
    ->afterCreating(function (User $user)
    {
        $featuredMedia                     = $user->media()->first();
        $featuredMedia->pivot->is_featured = true;
        $featuredMedia->pivot->save();
    })
    ->create();

按所有者检索媒体

要按用户检索媒体,请在用户/团队/管理员或其他有权上传媒体的任何模型上使用 HasMedia 特性

use AnisAronno\MediaGallery\Traits\HasMedia;

use HasOwnedMedia;

$user = User::find(1); // or auth()->user();
$user->ownedMedia();

当然,以下是每个部分带有子标题的更新文本

身份验证和配置

自定义身份验证保护者

您可以通过 发布配置文件 并将 'guard' 键更改为所需的身份验证保护者来自定义路由的身份验证保护者。

'guard' => ['auth'],

或者,您可以使用 API 中间件。

'guard' => ['auth:sanctum'],

限制媒体查看

view_all_media_anyone 设置为 false 以仅限制媒体查看为用户上传的图片;默认为 true,允许查看所有媒体。

'view_all_media_anyone' => false,

定义管理媒体的门

AuthServiceProvider.php 中定义 canManageMediaContent 门,允许指定的用户管理媒体内容。

use Illuminate\Support\Facades\Gate;

Gate::define('canManageMediaContent', function (User $user) {
    return in_array($user->email, [
        'contact@anichur.com',
    ]);
});

缓存过期时间

设置缓存过期时间。默认值为 1440。

'cache_expiry_time' => 1440,

使用关系模型中的媒体

对于存储关系模型(例如,博客)中的媒体,请使用以下方法

  • 附件: $blog->media()->attach(array $id)
  • 同步: $blog->media()->sync(array $id)
  • 删除: $blog->media()->detach(array $id)

处理单个或特色媒体

要处理单个或特色媒体,请使用 featuredMedia 方法并在第二个参数中将 isFeatured 设置为 true

  • 附件: $blog->featuredMedia()->attach(array $id, ['is_featured' => 1])

注意:同步和删除相同;请使用 featuredMedia 而不是 featuredMedia

辅助方法

您还可以使用辅助方法进行媒体管理

  • 对于附件: $blog->attachMedia(array $ids, $isFeatured = false)

  • 对于同步: $blog->syncMedia(array $ids, $isFeatured = false)

  • 对于删除: $blog->detachMedia(array $ids, $isFeatured = false)

媒体 API 路由

要管理您的媒体存储,您可以使用以下路由

  • 获取所有媒体: api/media(GET)
  • 获取单个媒体: api/media/{id}(GET)
  • 存储媒体: api/media(POST)
  • 删除媒体: api/media/{id}(DELETE)
  • 更新媒体: api/media/update/{id}(POST)
  • 批量删除: media/batch-delete(POST)

从关系模型获取媒体/媒体

要从关系模型检索媒体/媒体

  • 以数组形式获取所有媒体: $blog->media

  • 仅获取特色媒体: $blog->media

您可以访问媒体属性,如 URL、标题、mimes、大小和类型

  • $media->url
  • $media->title
  • $media->mimes
  • $media->size
  • $media->type

贡献指南

如果您想为此包做出贡献,请遵循我们的贡献指南

许可证

此包是开源软件,许可协议为MIT许可证