kda/eloquent-medialibrary-item

将模型与 spatie/media-library 关联

4.1.2 2024-09-02 12:46 UTC

README

Latest Version on Packagist Total Downloads

关于

这是一个旨在填补 spatie/laravel-medialibrary 空白的包,允许将相同的媒体链接到多个模型

此外,它还提供了媒体口味的概念,可以集中和重用媒体转换

安装

您可以通过 Composer 安装此包

composer require kda/eloquent-medialibrary-item

您可以使用以下命令发布和运行迁移

php artisan vendor:publish --provider="\KDA\Eloquent\MedialibraryItem" --tag="migrations"
php artisan migrate

您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="\KDA\Eloquent\MedialibraryItem" --tag="config"

这是已发布配置文件的内容

return [
];

用法

媒体口味

首先,您需要在项目中创建一个媒体口味。创建一个扩展 \KDA\Eloquent\MedialibraryItem\Flavor 的类。

<?php

namespace App\Flavors;

use KDA\Eloquent\MedialibraryItem\Flavor;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\MediaLibrary\Conversions\Conversion;

class Header extends Flavor{

    //spatie collection name
    public $collection = "header";

    //define your variants
    public $variants= [
        'bw',
        'sepia'
    ];
    // define your breakpoints
    public $breakpoints = [
        'sm',
        'md',
        'xl',
    ];

    //define your stack
    public $stack = [
        'dimensions',
        'ratios',
        'colors'
    ];
   
    //set to false to only generate variants
    //if true, you'll have a conversion with no variant
    public $generateOneWithoutVariant = true;
    
    public function colors(Media $media,Conversion $conversion, string $breakpoint,array |null $data,string | null $variant) :Conversion {
        return match($variant){
            "bw"=> $conversion->greyscale(),
            "sepia"=> $conversion->sepia()->blur(20),
            default=> $conversion
        };
    }


    public function ratios(Media $media,Conversion $conversion, string $breakpoint,array |null $data, string | null $variant) :Conversion {
        return match($breakpoint){
            'xl'=> $conversion->focalCrop(1024,1024,50,50,2),
            default=> $conversion
        };
    }

    public function dimensions(Media $media,Conversion $conversion, string $breakpoint, array |null $data) :Conversion {
        return match($breakpoint){
            'md'=> $conversion->width(128)->height(128),
            default=> $conversion
        };
    }
}

模型

使用 \KDA\Eloquent\MedialibraryItem\Models\Traits\Curates 特性增强任何模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;


class Post extends Model 
{
   
    use \KDA\Eloquent\MedialibraryItem\Models\Traits\Curates;
    /// 

然后您可以在模型的 addMedia 方法上关联媒体

    
    $p->addMedia($media1)->usingFlavor('\App\Flavors\Header');

这将添加媒体并为所有断点和变体生成所有转换

然后您可以通过这种方式检索媒体

//reading media 
$p->mediaLibraryItems->first()->getFirstMediaByFlavor('App\Flavors\Header')->getUrl('xl');
//reading variant
$p->mediaLibraryItems->first()->getFirstMediaByFlavor('App\Flavors\Header')->getUrl('bw-xl');

提示

您可以通过在服务容器中绑定它们来缩短您的口味

    public function boot()
    {
        $this->app->bind('avatar', \App\Flavors\Avatar::class);
        $this->app->bind('header', \App\Flavors\Header::class);
    }

    ....

    $p->mediaLibraryItems->first()->getFirstMediaByFlavor('header')->getUrl('xl');

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

有关详细信息,请参阅 贡献指南

安全漏洞

有关如何报告安全漏洞的更多信息,请参阅 我们的安全策略

鸣谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件