kda / eloquent-medialibrary-item
将模型与 spatie/media-library 关联
4.1.2
2024-09-02 12:46 UTC
Requires
- fdt2k/laravel-package-service-provider: dev-dev-v2 ||^2.0
- kda/eloquent-defaultattributes: dev-dev-v1 || ^1.0
- spatie/laravel-medialibrary: ^10 || ^11.0
Requires (Dev)
- laravel/framework: ^10.0
- laravel/pint: ^1.1
- orchestra/canvas: ^8.1
- orchestra/testbench: ^8.5
This package is auto-updated.
Last update: 2024-09-24 15:12:35 UTC
README
关于
这是一个旨在填补 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)。有关更多信息,请参阅 许可证文件