Extension for use spatie/laravel-medialibrary
fomvasss/laravel-medialibrary-extension is a Laravel package for extension for use spatie/laravel-medialibrary.
It currently has 4 GitHub stars and 3.187 downloads on Packagist (latest version 6.3.2).
Install it with composer require fomvasss/laravel-medialibrary-extension.
Discover more Laravel packages by fomvasss
or browse all Laravel packages to compare alternatives.
Last updated
If this package is useful to you, consider supporting its development:
USDT TRC20 address:
THLgp6DxiAtbNHvgnKV56vk1L38UuUagKf
Extensions to the file management functionality of package spatie/laravel-medialibrary
composer require fomvasss/laravel-medialibrary-extension
Publish 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"
Publish fomvasss/laravel-medialibrary-extension
php artisan vendor:publish --provider="Fomvasss\MediaLibraryExtension\ServiceProvider"
Run migration:
php artisan migrate
Implements interface:
Fomvasss\MediaLibraryExtension\HasMedia\HasMedia
Usage in Eloquent models trait:
Fomvasss\MediaLibraryExtension\HasMedia\InteractsWithMedia
In Your model: app/Models/Article.php:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Spatie\Image\Enums\Fit;
use Spatie\MediaLibrary\MediaCollections\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->addMediaConversion('main')
->performOnCollections('image')
->format('webp'); // Supported medialibrary: jpg, png, svg, webp, avif, pdf, mp4 , mov or webm
$this->addMediaConversion('preview')
->performOnCollections('image', 'images')
->fit(Fit::Contain, 300, 300)
->nonQueued();
}
}
In controller 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!
}
}
Run \Fomvasss\MediaLibraryExtension\Actions\ClearMediaTemporary::doHandle()
For upload files from collection name images you need send form with next data:
<input type="file" name="image">
<input type="hidden" name="image_custom[15][alt]" value="This Alt image text">
<input type="file" multiple="" name="images[]">
For set sort order file from collection name images and id = 13, 15 you need send form with next data (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">
For deleted file from collection name images and id = 13, 15 you need send form with next data:
<input type="hidden" name="images_deleted[]" value="13">
<input type="hidden" name="images_deleted[]" value="15">