fomvasss/laravel-medialibrary-extension

Extension for use spatie/laravel-medialibrary

Maintainers

Package info

github.com/fomvasss/laravel-medialibrary-extension

pkg:composer/fomvasss/laravel-medialibrary-extension

Statistics

Installs: 3 089

Dependents: 0

Suggesters: 0

Stars: 3

Open Issues: 0

6.3.0 2026-05-02 11:10 UTC

README

License Build Status Latest Stable Version Total Downloads Quality Score

Support

If this package is useful to you, consider supporting its development:

Monobank Ko-Fi USDT TRC20

USDT TRC20 address: THLgp6DxiAtbNHvgnKV56vk1L38UuUagKf

Extensions to the file management functionality of package spatie/laravel-medialibrary

Installation

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

Integration in Eloquent models

Implements interface:

Fomvasss\MediaLibraryExtension\HasMedia\HasMedia

Usage in Eloquent models trait:

Fomvasss\MediaLibraryExtension\HasMedia\InteractsWithMedia

Usage example

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!
    }   
}

Clear temporary downloads

Run \Fomvasss\MediaLibraryExtension\Actions\ClearMediaTemporary::doHandle()

Examples HTML form

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">

Links

spatie/laravel-medialibrary