PHPackages                             akkurateio/laravel-media - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Image &amp; Media](/categories/media)
4. /
5. akkurateio/laravel-media

ActiveLibrary[Image &amp; Media](/categories/media)

akkurateio/laravel-media
========================

Media package for Laravel applications

v0.1.1(5y ago)0801AGPL-3.0-onlyVue

Since Jan 12Pushed 5y ago2 watchersCompare

[ Source](https://github.com/akkurateio/laravel-media)[ Packagist](https://packagist.org/packages/akkurateio/laravel-media)[ RSS](/packages/akkurateio-laravel-media/feed)WikiDiscussions 0.x Synced today

READMEChangelogDependencies (10)Versions (4)Used By (1)

Laravel Media
=============

[](#laravel-media)

Module de gestion de media pour l’écosystème Akkurate.

L’objet de ce package est d’étendre le package spatie/laravel-medialibrary, en permettant notamment d’importer des media sans forcément les rattacher immédiatement à un model, ou à l’inverse d’attacher le même media à plusieurs models (une image pour illustrer un article de blog qui pourrait servir dans un carousel ou être utlisée comme avatar pour un compte ou un utlisateur).

Installation (le package est installé de base avec subvitamine/akkurate-laravel-boilerplate)
--------------------------------------------------------------------------------------------

[](#installation-le-package-est-installé-de-base-avec-subvitamineakkurate-laravel-boilerplate)

```
composer require akkurate/laravel-media
```

Publier le fichier de configuration:

```
php artisan vendor:publish --provider="Akkurate\LaravelMedia\LaravelMediaServiceProvider" --tag="config"
```

```
php artisan migrate
```

```
php artisan media:seed
```

Pour la gestion des tags, vérifier que la locale est bien définie dans le .env

```
APP_LOCALE=fr

```

Concepts
--------

[](#concepts)

La table et le model Media sont inchangés, mais un Media n’est plus rattaché directement à un model de l’application mais à un model générique Resource.

Chaque model à qui doit pouvoir être associé à un media doit utliser le trait HasResources.

```
use Akkurate\LaravelMedia\Traits\HasResources;

class Model
{
    use HasResources;
}

```

Une resource étend le media en ajout un compte de rattachement, un utilisateur, un texte alternatif, une légende.

Le model Media utilisé est le model media custom Akkurate\\LaravelMedia\\Models\\Media, qui étend le model Media de Spatie. Ce model custom n’ajoute aucune méthode ni aucune relation en v1, mais, dans une perspective d’évolution, le permettra sans modifier la structure ni la config.

Une table pivot model\_resource permet d’attribuer la même resource à plusieurs models, quels qu’ils soient.

Config
------

[](#config)

Chaque resource est enregistrée avec un certain nombre de conversions standardisées, activables dans un fichier de configuration pour l’ensemble du projet. (Et non plus pour chaque model individuellement.)

```
'conversions' => [
    'thumb' => true,
    'preview' => true,
    'square' => true,
    '4:3' => true,
    '16:9' => true,
],

```

Enregistrement d’un media
-------------------------

[](#enregistrement-dun-media)

Avant de créer un media, créer au préalable une resource

```
$resource = Resource::create([
    'name' => $request->alt,
    'user_id' => auth()->user()->id,
    'account_id' => auth()->user()->account_id,
]);

```

Une fois la resource créée, lui attacher le media

```
$resource->addMedia($file)

```

La resource peut ensuite être attachée à n’importe quel model

```
$user = User::find(1);
$user->resources()->attach($resource, ['legend' => 'Image pour l’utilisateur 1']);

$account = Account::find(1);
$account->resources()->attach($resource, ['legend' => 'Image pour le compte 2']);

```

Le même media pouvant avoir diverses utilisations, il est possible de définir un champ « legend » au niveau de la relation.

Utilisation d’un media
----------------------

[](#utilisation-dun-media)

La récupération du ou des media attachés à un model nécessite une étape supplémentaire (le passage par la table pivot media\_model\_resource).

```
$model->resources->first()->getFirstMedia()

```

Des méthodes permettent de faciliter les appels courants

```
$model->getLastResource() // =  $model->resources->last();
$model->getLastResourceMedia() // =  $model->resources->last()->getFirstMedia();
$model->getLastResourceMediaUrl() // =  $model->resources->last()->getFirstMediaUrl();
$model->getPreview() // =  $model->resources->last()->getFirstMediaUrl('default', 'preview');
$model->getSquare() // =  $model->resources->last()->getFirstMediaUrl('default', 'square');
$model->get4_3() // =  $model->resources->last()->getFirstMediaUrl('default', '4:3');

```

### Gestion d’un model une seule resource

[](#gestion-dun-model-une-seule-resource)

Dans la vue edit

```
@component('back::atomicdesign.atoms.has-media', ['object' => $model, 'form' => $form, 'resource' => $model->getLastResource()])@endcomponent

```

### Gestion d’un model avec plusieurs resources

[](#gestion-dun-model-avec-plusieurs-resources)

Dans la vue edit

```
@component('back::atomicdesign.atoms.has-media', ['multiple' => true, 'object' => $model, 'form' => $form, 'resource' => $model->resources])@endcomponent

```

Dans la method edit du controller, après l’update

```
$model->syncResources($request);

```

API
---

[](#api)

### Medias

[](#medias)

```
GET /media/medias?include=resource
POST /media/medias // params: *image, *name, alt, legend
GET /media/medias/{id}
PUT,PATCH /media/medias/{id} // params: *name, alt, legend
DELETE /media/medias/{id}
```

### Resources

[](#resources)

```
GET /media/resources?include=media,tags&filter[tags]=tag1,tag3 // la resource ne remonte que si les deux tags sont attachés
GET /media/resources/{id}

// Attacher une resource à n’importe quel model
POST /media/resources/{id}/attach // params: *model_type, *model_id
// Supprimer une association resource/model
POST /media/resources/{id}/detach // params: *model_type, *model_id

// Gestion des tags sur les resources
POST /media/resources/{id}/tags/attach // params: *tag
POST /media/resources/{id}/tags/detach // params: *tag
```

###  Health Score

23

—

LowBetter than 30% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 50% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~12 days

Total

3

Last Release

1870d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f1033c0f3d0e9cebe3f9c63c293dbadcf26f46a90c467a8d66ce46621b243579?d=identicon)[camille-badique](/maintainers/camille-badique)

![](https://www.gravatar.com/avatar/2b35bce36f14b032c9ec57d12ff3b4719c02c85b41b0715e0d0279a6ce01dbf2?d=identicon)[dylanduault](/maintainers/dylanduault)

---

Top Contributors

[![bastosh](https://avatars.githubusercontent.com/u/19573137?v=4)](https://github.com/bastosh "bastosh (4 commits)")[![cambad](https://avatars.githubusercontent.com/u/48125516?v=4)](https://github.com/cambad "cambad (3 commits)")[![Dylan-Duault](https://avatars.githubusercontent.com/u/1349678?v=4)](https://github.com/Dylan-Duault "Dylan-Duault (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/akkurateio-laravel-media/health.svg)

```
[![Health](https://phpackages.com/badges/akkurateio-laravel-media/health.svg)](https://phpackages.com/packages/akkurateio-laravel-media)
```

###  Alternatives

[league/glide

Wonderfully easy on-demand image manipulation library with an HTTP based API.

2.6k50.5M100](/packages/league-glide)[jenssegers/imagehash

Perceptual image hashing for PHP

2.0k2.1M4](/packages/jenssegers-imagehash)[lasserafn/php-initial-avatar-generator

A package to generate avatars with initials for PHP

4414.1M11](/packages/lasserafn-php-initial-avatar-generator)[bkwld/croppa

Image thumbnail creation through specially formatted URLs for Laravel

508489.5k18](/packages/bkwld-croppa)[intervention/image-laravel

Laravel Integration of Intervention Image

1445.8M73](/packages/intervention-image-laravel)[ctessier/nova-advanced-image-field

An advanced image field for Nova with cropping and resizing.

103538.5k](/packages/ctessier-nova-advanced-image-field)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
