fomvasss / laravel-medialibrary-extension
spatie/laravel-medialibrary 扩展
6.0.1
2024-06-05 18:15 UTC
Requires
- illuminate/support: ^10.0|^11.0
- spatie/laravel-medialibrary: ^11.0
This package is auto-updated.
Last update: 2024-09-05 18:49:48 UTC
README
扩展 spatie/laravel-medialibrary 包的文件管理功能
安装
composer require fomvasss/laravel-medialibrary-extension
发布 spatie/laravel-medialibrary
(如果尚未发布)
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-migrations" php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-config"
发布 fomvasss/laravel-medialibrary-extension
php artisan vendor:publish --provider="Fomvasss\MediaLibraryExtension\ServiceProvider"
运行迁移
php artisan migrate
将外观添加到 config/app.php
中的 aliases
(可选)
//... 'MediaManager' => \Fomvasss\MediaLibraryExtension\Facade::class, //...
在 Eloquent 模型中集成
实现接口:Fomvasss\MediaLibraryExtension\HasMedia\HasMedia
在 Eloquent 模型特质中使用:Fomvasss\MediaLibraryExtension\HasMedia\InteractsWithMedia
使用
在模型 app/Models/Article.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Spatie\MediaLibrary\Models\Media; use Fomvasss\MediaLibraryExtension\HasMedia\HasMedia; use Fomvasss\MediaLibraryExtension\HasMedia\InteractsWithMedia; class Article extends Model implements HasMedia { use InteractsWithMedia; // html-input name == media collection name, example: protected $mediaSingleCollections = ['image']; protected $mediaMultipleCollections = ['images', 'files']; /** * Optional method. */ public function customMediaConversions(Media $media = null): void { $this->addMediaCollection('main') ->singleFile(); $this->addMediaConversion('table') ->format('jpg')->quality(93) ->fit('crop', 360, 257); } }
在控制器 app/Http/Controllers/Article.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HomeController extends Controller { public function store(PostRequest $request) { $article = Article::create($request->validated()); $article->mediaManage($request); // Or usage Facade: \MediaLibrary::manage($article, $request); //... } public function show($id) { $article = \App\Model\Article::findOrFail($id); $url = $article->getFirstMediaUrl('image'); $image = $article->getFirstMedia('image'); $alt = $image->getCustomProperty('alt'); $images = $article->getMedia('images'); // collection // ... // Also available all methods spatie/laravel-medialibrary! } }
HTML 表单示例
要从集合名称 images
上传文件,您需要发送包含以下数据的表单
<input type="file" name="image"> <input type="hidden" name="image_custom[15][alt]" value="This Alt image text"> <input type="file" multiple="" name="images[]">
要设置集合名称 images
和 id = 13, 15
的文件排序顺序,您需要发送包含以下数据的表单(weight = 21, 22
)
<input type="hidden" name="images_weight[15]" value="21"> <input type="hidden" name="images_weight[13]" value="22"> <input type="hidden" name="images_custom[13][alt]" value="Some text">
要从集合名称 images
和 id = 13, 15
删除文件,您需要发送包含以下数据的表单
<input type="hidden" name="images_deleted[]" value="13"> <input type="hidden" name="images_deleted[]" value="15">