feat: integrate Spatie Media Library and update configuration
- Added Spatie Media Library dependencies to composer.json - Created media table migration for media management - Added media library configuration file - Updated Entry model to support media handling - Updated .gitignore to exclude Vite files - Added basic logging to app.js
This commit is contained in:
parent
6cf8d5dfd4
commit
5ea0ddce23
8 changed files with 874 additions and 10 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -21,3 +21,4 @@ yarn-error.log
|
||||||
/.nova
|
/.nova
|
||||||
/.vscode
|
/.vscode
|
||||||
/.zed
|
/.zed
|
||||||
|
.vite
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,19 @@
|
||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Filament\Forms\Components\RichEditor\FileAttachmentProviders\SpatieMediaLibraryFileAttachmentProvider;
|
||||||
|
use Filament\Forms\Components\RichEditor\Models\Concerns\InteractsWithRichContent;
|
||||||
|
use Filament\Forms\Components\RichEditor\Models\Contracts\HasRichContent;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Spatie\MediaLibrary\HasMedia;
|
||||||
|
use Spatie\MediaLibrary\InteractsWithMedia;
|
||||||
|
|
||||||
|
class Entry extends Model implements HasRichContent, HasMedia
|
||||||
|
|
||||||
class Entry extends Model
|
|
||||||
{
|
{
|
||||||
|
|
||||||
|
use InteractsWithMedia, InteractsWithRichContent;
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'title',
|
'title',
|
||||||
'slug',
|
'slug',
|
||||||
|
|
@ -15,4 +24,19 @@ class Entry extends Model
|
||||||
'published_at',
|
'published_at',
|
||||||
'content',
|
'content',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set up rich content configuration for media library integration
|
||||||
|
*/
|
||||||
|
public function setUpRichContent(): void
|
||||||
|
{
|
||||||
|
$this->registerRichContent('content')
|
||||||
|
->fileAttachmentProvider(
|
||||||
|
SpatieMediaLibraryFileAttachmentProvider::make()
|
||||||
|
->collection('content-attachments')
|
||||||
|
->preserveFilenames()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,12 @@
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.2",
|
"php": "^8.2",
|
||||||
"filament/filament": "^4.0",
|
"filament/filament": "^4.0",
|
||||||
|
"filament/spatie-laravel-media-library-plugin": "^4.0",
|
||||||
"laravel/fortify": "^1.30",
|
"laravel/fortify": "^1.30",
|
||||||
"laravel/framework": "^12.0",
|
"laravel/framework": "^12.0",
|
||||||
"laravel/tinker": "^2.10.1",
|
"laravel/tinker": "^2.10.1",
|
||||||
"livewire/flux": "^2.9.0"
|
"livewire/flux": "^2.9.0",
|
||||||
|
"spatie/laravel-medialibrary": "^11.17"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"fakerphp/faker": "^1.23",
|
"fakerphp/faker": "^1.23",
|
||||||
|
|
|
||||||
507
composer.lock
generated
507
composer.lock
generated
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "ed91eaf8381afba35eea6bfdd94e4e18",
|
"content-hash": "bec347dcc3a450fc682920a766cbe019",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "anourvalar/eloquent-serialize",
|
"name": "anourvalar/eloquent-serialize",
|
||||||
|
|
@ -565,6 +565,83 @@
|
||||||
],
|
],
|
||||||
"time": "2024-07-16T11:13:48+00:00"
|
"time": "2024-07-16T11:13:48+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "composer/semver",
|
||||||
|
"version": "3.4.4",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/composer/semver.git",
|
||||||
|
"reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95",
|
||||||
|
"reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^5.3.2 || ^7.0 || ^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpstan/phpstan": "^1.11",
|
||||||
|
"symfony/phpunit-bridge": "^3 || ^7"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-main": "3.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Composer\\Semver\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nils Adermann",
|
||||||
|
"email": "naderman@naderman.de",
|
||||||
|
"homepage": "http://www.naderman.de"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jordi Boggiano",
|
||||||
|
"email": "j.boggiano@seld.be",
|
||||||
|
"homepage": "http://seld.be"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Rob Bast",
|
||||||
|
"email": "rob.bast@gmail.com",
|
||||||
|
"homepage": "http://robbast.nl"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Semver library that offers utilities, version constraint parsing and validation.",
|
||||||
|
"keywords": [
|
||||||
|
"semantic",
|
||||||
|
"semver",
|
||||||
|
"validation",
|
||||||
|
"versioning"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"irc": "ircs://irc.libera.chat:6697/composer",
|
||||||
|
"issues": "https://github.com/composer/semver/issues",
|
||||||
|
"source": "https://github.com/composer/semver/tree/3.4.4"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://packagist.com",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/composer",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2025-08-20T19:15:30+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "danharrin/date-format-converter",
|
"name": "danharrin/date-format-converter",
|
||||||
"version": "v0.3.1",
|
"version": "v0.3.1",
|
||||||
|
|
@ -1432,6 +1509,43 @@
|
||||||
},
|
},
|
||||||
"time": "2025-12-30T13:02:44+00:00"
|
"time": "2025-12-30T13:02:44+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "filament/spatie-laravel-media-library-plugin",
|
||||||
|
"version": "v4.4.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/filamentphp/spatie-laravel-media-library-plugin.git",
|
||||||
|
"reference": "73748df28a9c2e8c34d2c02f9314c330602e1830"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/filamentphp/spatie-laravel-media-library-plugin/zipball/73748df28a9c2e8c34d2c02f9314c330602e1830",
|
||||||
|
"reference": "73748df28a9c2e8c34d2c02f9314c330602e1830",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"filament/support": "self.version",
|
||||||
|
"php": "^8.2",
|
||||||
|
"spatie/laravel-medialibrary": "^11.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Filament\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"description": "Filament support for `spatie/laravel-medialibrary`.",
|
||||||
|
"homepage": "https://github.com/filamentphp/filament",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/filamentphp/filament/issues",
|
||||||
|
"source": "https://github.com/filamentphp/filament"
|
||||||
|
},
|
||||||
|
"time": "2025-12-09T09:54:02+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "filament/support",
|
"name": "filament/support",
|
||||||
"version": "v4.4.0",
|
"version": "v4.4.0",
|
||||||
|
|
@ -3535,6 +3649,84 @@
|
||||||
],
|
],
|
||||||
"time": "2025-12-19T02:00:29+00:00"
|
"time": "2025-12-19T02:00:29+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "maennchen/zipstream-php",
|
||||||
|
"version": "3.2.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/maennchen/ZipStream-PHP.git",
|
||||||
|
"reference": "682f1098a8fddbaf43edac2306a691c7ad508ec5"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/682f1098a8fddbaf43edac2306a691c7ad508ec5",
|
||||||
|
"reference": "682f1098a8fddbaf43edac2306a691c7ad508ec5",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-mbstring": "*",
|
||||||
|
"ext-zlib": "*",
|
||||||
|
"php-64bit": "^8.3"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"brianium/paratest": "^7.7",
|
||||||
|
"ext-zip": "*",
|
||||||
|
"friendsofphp/php-cs-fixer": "^3.86",
|
||||||
|
"guzzlehttp/guzzle": "^7.5",
|
||||||
|
"mikey179/vfsstream": "^1.6",
|
||||||
|
"php-coveralls/php-coveralls": "^2.5",
|
||||||
|
"phpunit/phpunit": "^12.0",
|
||||||
|
"vimeo/psalm": "^6.0"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"guzzlehttp/psr7": "^2.4",
|
||||||
|
"psr/http-message": "^2.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"ZipStream\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Paul Duncan",
|
||||||
|
"email": "pabs@pablotron.org"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jonatan Männchen",
|
||||||
|
"email": "jonatan@maennchen.ch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jesse Donat",
|
||||||
|
"email": "donatj@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "András Kolesár",
|
||||||
|
"email": "kolesar@kolesar.hu"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.",
|
||||||
|
"keywords": [
|
||||||
|
"stream",
|
||||||
|
"zip"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/maennchen/ZipStream-PHP/issues",
|
||||||
|
"source": "https://github.com/maennchen/ZipStream-PHP/tree/3.2.1"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/maennchen",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2025-12-10T09:58:31+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "masterminds/html5",
|
"name": "masterminds/html5",
|
||||||
"version": "2.10.0",
|
"version": "2.10.0",
|
||||||
|
|
@ -3604,16 +3796,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "monolog/monolog",
|
"name": "monolog/monolog",
|
||||||
"version": "3.9.0",
|
"version": "3.10.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/Seldaek/monolog.git",
|
"url": "https://github.com/Seldaek/monolog.git",
|
||||||
"reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6"
|
"reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6",
|
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0",
|
||||||
"reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6",
|
"reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -3631,7 +3823,7 @@
|
||||||
"graylog2/gelf-php": "^1.4.2 || ^2.0",
|
"graylog2/gelf-php": "^1.4.2 || ^2.0",
|
||||||
"guzzlehttp/guzzle": "^7.4.5",
|
"guzzlehttp/guzzle": "^7.4.5",
|
||||||
"guzzlehttp/psr7": "^2.2",
|
"guzzlehttp/psr7": "^2.2",
|
||||||
"mongodb/mongodb": "^1.8",
|
"mongodb/mongodb": "^1.8 || ^2.0",
|
||||||
"php-amqplib/php-amqplib": "~2.4 || ^3",
|
"php-amqplib/php-amqplib": "~2.4 || ^3",
|
||||||
"php-console/php-console": "^3.1.8",
|
"php-console/php-console": "^3.1.8",
|
||||||
"phpstan/phpstan": "^2",
|
"phpstan/phpstan": "^2",
|
||||||
|
|
@ -3691,7 +3883,7 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/Seldaek/monolog/issues",
|
"issues": "https://github.com/Seldaek/monolog/issues",
|
||||||
"source": "https://github.com/Seldaek/monolog/tree/3.9.0"
|
"source": "https://github.com/Seldaek/monolog/tree/3.10.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
|
@ -3703,7 +3895,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-03-24T10:02:05+00:00"
|
"time": "2026-01-02T08:56:05+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nesbot/carbon",
|
"name": "nesbot/carbon",
|
||||||
|
|
@ -5382,6 +5574,134 @@
|
||||||
],
|
],
|
||||||
"time": "2022-12-17T21:53:22+00:00"
|
"time": "2022-12-17T21:53:22+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "spatie/image",
|
||||||
|
"version": "3.8.7",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/spatie/image.git",
|
||||||
|
"reference": "4d35db207c4b317bc221d02ab7ba94aa78b44c24"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/spatie/image/zipball/4d35db207c4b317bc221d02ab7ba94aa78b44c24",
|
||||||
|
"reference": "4d35db207c4b317bc221d02ab7ba94aa78b44c24",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-exif": "*",
|
||||||
|
"ext-json": "*",
|
||||||
|
"ext-mbstring": "*",
|
||||||
|
"php": "^8.2",
|
||||||
|
"spatie/image-optimizer": "^1.7.5",
|
||||||
|
"spatie/temporary-directory": "^2.2",
|
||||||
|
"symfony/process": "^6.4|^7.0|^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"ext-gd": "*",
|
||||||
|
"ext-imagick": "*",
|
||||||
|
"laravel/sail": "^1.34",
|
||||||
|
"pestphp/pest": "^3.0|^4.0",
|
||||||
|
"phpstan/phpstan": "^1.10.50",
|
||||||
|
"spatie/pest-plugin-snapshots": "^2.1",
|
||||||
|
"spatie/pixelmatch-php": "^1.0",
|
||||||
|
"spatie/ray": "^1.40.1",
|
||||||
|
"symfony/var-dumper": "^6.4|^7.0|^8.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Spatie\\Image\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Freek Van der Herten",
|
||||||
|
"email": "freek@spatie.be",
|
||||||
|
"homepage": "https://spatie.be",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Manipulate images with an expressive API",
|
||||||
|
"homepage": "https://github.com/spatie/image",
|
||||||
|
"keywords": [
|
||||||
|
"image",
|
||||||
|
"spatie"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/spatie/image/tree/3.8.7"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://spatie.be/open-source/support-us",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/spatie",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2025-11-24T15:10:50+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "spatie/image-optimizer",
|
||||||
|
"version": "1.8.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/spatie/image-optimizer.git",
|
||||||
|
"reference": "2ad9ac7c19501739183359ae64ea6c15869c23d9"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/spatie/image-optimizer/zipball/2ad9ac7c19501739183359ae64ea6c15869c23d9",
|
||||||
|
"reference": "2ad9ac7c19501739183359ae64ea6c15869c23d9",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-fileinfo": "*",
|
||||||
|
"php": "^7.3|^8.0",
|
||||||
|
"psr/log": "^1.0 | ^2.0 | ^3.0",
|
||||||
|
"symfony/process": "^4.2|^5.0|^6.0|^7.0|^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"pestphp/pest": "^1.21|^2.0|^3.0|^4.0",
|
||||||
|
"phpunit/phpunit": "^8.5.21|^9.4.4|^10.0|^11.0|^12.0",
|
||||||
|
"symfony/var-dumper": "^4.2|^5.0|^6.0|^7.0|^8.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Spatie\\ImageOptimizer\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Freek Van der Herten",
|
||||||
|
"email": "freek@spatie.be",
|
||||||
|
"homepage": "https://spatie.be",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Easily optimize images using PHP",
|
||||||
|
"homepage": "https://github.com/spatie/image-optimizer",
|
||||||
|
"keywords": [
|
||||||
|
"image-optimizer",
|
||||||
|
"spatie"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/spatie/image-optimizer/issues",
|
||||||
|
"source": "https://github.com/spatie/image-optimizer/tree/1.8.1"
|
||||||
|
},
|
||||||
|
"time": "2025-11-26T10:57:19+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "spatie/invade",
|
"name": "spatie/invade",
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
|
|
@ -5441,6 +5761,116 @@
|
||||||
],
|
],
|
||||||
"time": "2024-05-17T09:06:10+00:00"
|
"time": "2024-05-17T09:06:10+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "spatie/laravel-medialibrary",
|
||||||
|
"version": "11.17.7",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/spatie/laravel-medialibrary.git",
|
||||||
|
"reference": "237f34f70ae97523c1a99cad7176e229b8d6f0b6"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/237f34f70ae97523c1a99cad7176e229b8d6f0b6",
|
||||||
|
"reference": "237f34f70ae97523c1a99cad7176e229b8d6f0b6",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"composer/semver": "^3.4",
|
||||||
|
"ext-exif": "*",
|
||||||
|
"ext-fileinfo": "*",
|
||||||
|
"ext-json": "*",
|
||||||
|
"illuminate/bus": "^10.2|^11.0|^12.0",
|
||||||
|
"illuminate/conditionable": "^10.2|^11.0|^12.0",
|
||||||
|
"illuminate/console": "^10.2|^11.0|^12.0",
|
||||||
|
"illuminate/database": "^10.2|^11.0|^12.0",
|
||||||
|
"illuminate/pipeline": "^10.2|^11.0|^12.0",
|
||||||
|
"illuminate/support": "^10.2|^11.0|^12.0",
|
||||||
|
"maennchen/zipstream-php": "^3.1",
|
||||||
|
"php": "^8.2",
|
||||||
|
"spatie/image": "^3.3.2",
|
||||||
|
"spatie/laravel-package-tools": "^1.16.1",
|
||||||
|
"spatie/temporary-directory": "^2.2",
|
||||||
|
"symfony/console": "^6.4.1|^7.0|^8.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"php-ffmpeg/php-ffmpeg": "<0.6.1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"aws/aws-sdk-php": "^3.293.10",
|
||||||
|
"ext-imagick": "*",
|
||||||
|
"ext-pdo_sqlite": "*",
|
||||||
|
"ext-zip": "*",
|
||||||
|
"guzzlehttp/guzzle": "^7.8.1",
|
||||||
|
"larastan/larastan": "^2.7|^3.0",
|
||||||
|
"league/flysystem-aws-s3-v3": "^3.22",
|
||||||
|
"mockery/mockery": "^1.6.7",
|
||||||
|
"orchestra/testbench": "^8.36|^9.15|^10.8",
|
||||||
|
"pestphp/pest": "^2.36|^3.0|^4.0",
|
||||||
|
"phpstan/extension-installer": "^1.3.1",
|
||||||
|
"spatie/laravel-ray": "^1.33",
|
||||||
|
"spatie/pdf-to-image": "^2.2|^3.0",
|
||||||
|
"spatie/pest-expectations": "^1.13",
|
||||||
|
"spatie/pest-plugin-snapshots": "^2.1"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"league/flysystem-aws-s3-v3": "Required to use AWS S3 file storage",
|
||||||
|
"php-ffmpeg/php-ffmpeg": "Required for generating video thumbnails",
|
||||||
|
"spatie/pdf-to-image": "Required for generating thumbnails of PDFs and SVGs"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"laravel": {
|
||||||
|
"providers": [
|
||||||
|
"Spatie\\MediaLibrary\\MediaLibraryServiceProvider"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Spatie\\MediaLibrary\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Freek Van der Herten",
|
||||||
|
"email": "freek@spatie.be",
|
||||||
|
"homepage": "https://spatie.be",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Associate files with Eloquent models",
|
||||||
|
"homepage": "https://github.com/spatie/laravel-medialibrary",
|
||||||
|
"keywords": [
|
||||||
|
"cms",
|
||||||
|
"conversion",
|
||||||
|
"downloads",
|
||||||
|
"images",
|
||||||
|
"laravel",
|
||||||
|
"laravel-medialibrary",
|
||||||
|
"media",
|
||||||
|
"spatie"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/spatie/laravel-medialibrary/issues",
|
||||||
|
"source": "https://github.com/spatie/laravel-medialibrary/tree/11.17.7"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://spatie.be/open-source/support-us",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/spatie",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2025-12-15T08:51:55+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "spatie/laravel-package-tools",
|
"name": "spatie/laravel-package-tools",
|
||||||
"version": "1.92.7",
|
"version": "1.92.7",
|
||||||
|
|
@ -5567,6 +5997,67 @@
|
||||||
],
|
],
|
||||||
"time": "2025-02-21T14:16:57+00:00"
|
"time": "2025-02-21T14:16:57+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "spatie/temporary-directory",
|
||||||
|
"version": "2.3.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/spatie/temporary-directory.git",
|
||||||
|
"reference": "580eddfe9a0a41a902cac6eeb8f066b42e65a32b"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/spatie/temporary-directory/zipball/580eddfe9a0a41a902cac6eeb8f066b42e65a32b",
|
||||||
|
"reference": "580eddfe9a0a41a902cac6eeb8f066b42e65a32b",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^9.5"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Spatie\\TemporaryDirectory\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Alex Vanderbist",
|
||||||
|
"email": "alex@spatie.be",
|
||||||
|
"homepage": "https://spatie.be",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Easily create, use and destroy temporary directories",
|
||||||
|
"homepage": "https://github.com/spatie/temporary-directory",
|
||||||
|
"keywords": [
|
||||||
|
"php",
|
||||||
|
"spatie",
|
||||||
|
"temporary-directory"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/spatie/temporary-directory/issues",
|
||||||
|
"source": "https://github.com/spatie/temporary-directory/tree/2.3.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://spatie.be/open-source/support-us",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/spatie",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2025-01-13T13:04:43+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/clock",
|
"name": "symfony/clock",
|
||||||
"version": "v7.4.0",
|
"version": "v7.4.0",
|
||||||
|
|
|
||||||
303
config/media-library.php
Normal file
303
config/media-library.php
Normal file
|
|
@ -0,0 +1,303 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The disk on which to store added files and derived images by default. Choose
|
||||||
|
* one or more of the disks you've configured in config/filesystems.php.
|
||||||
|
*/
|
||||||
|
'disk_name' => env('MEDIA_DISK', 'public'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The maximum file size of an item in bytes.
|
||||||
|
* Adding a larger file will result in an exception.
|
||||||
|
*/
|
||||||
|
'max_file_size' => 1024 * 1024 * 10, // 10MB
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This queue connection will be used to generate derived and responsive images.
|
||||||
|
* Leave empty to use the default queue connection.
|
||||||
|
*/
|
||||||
|
'queue_connection_name' => env('QUEUE_CONNECTION', 'sync'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This queue will be used to generate derived and responsive images.
|
||||||
|
* Leave empty to use the default queue.
|
||||||
|
*/
|
||||||
|
'queue_name' => env('MEDIA_QUEUE', ''),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* By default all conversions will be performed on a queue.
|
||||||
|
*/
|
||||||
|
'queue_conversions_by_default' => env('QUEUE_CONVERSIONS_BY_DEFAULT', true),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Should database transactions be run after database commits?
|
||||||
|
*/
|
||||||
|
'queue_conversions_after_database_commit' => env('QUEUE_CONVERSIONS_AFTER_DB_COMMIT', true),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The fully qualified class name of the media model.
|
||||||
|
*/
|
||||||
|
'media_model' => Spatie\MediaLibrary\MediaCollections\Models\Media::class,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The fully qualified class name of the media observer.
|
||||||
|
*/
|
||||||
|
'media_observer' => Spatie\MediaLibrary\MediaCollections\Models\Observers\MediaObserver::class,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When enabled, media collections will be serialised using the default
|
||||||
|
* laravel model serialization behaviour.
|
||||||
|
*
|
||||||
|
* Keep this option disabled if using Media Library Pro components (https://medialibrary.pro)
|
||||||
|
*/
|
||||||
|
'use_default_collection_serialization' => false,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The fully qualified class name of the model used for temporary uploads.
|
||||||
|
*
|
||||||
|
* This model is only used in Media Library Pro (https://medialibrary.pro)
|
||||||
|
*/
|
||||||
|
'temporary_upload_model' => Spatie\MediaLibraryPro\Models\TemporaryUpload::class,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When enabled, Media Library Pro will only process temporary uploads that were uploaded
|
||||||
|
* in the same session. You can opt to disable this for stateless usage of
|
||||||
|
* the pro components.
|
||||||
|
*/
|
||||||
|
'enable_temporary_uploads_session_affinity' => true,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When enabled, Media Library pro will generate thumbnails for uploaded file.
|
||||||
|
*/
|
||||||
|
'generate_thumbnails_for_temporary_uploads' => true,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is the class that is responsible for naming generated files.
|
||||||
|
*/
|
||||||
|
'file_namer' => Spatie\MediaLibrary\Support\FileNamer\DefaultFileNamer::class,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The class that contains the strategy for determining a media file's path.
|
||||||
|
*/
|
||||||
|
'path_generator' => Spatie\MediaLibrary\Support\PathGenerator\DefaultPathGenerator::class,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The class that contains the strategy for determining how to remove files.
|
||||||
|
*/
|
||||||
|
'file_remover_class' => Spatie\MediaLibrary\Support\FileRemover\DefaultFileRemover::class,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Here you can specify which path generator should be used for the given class.
|
||||||
|
*/
|
||||||
|
'custom_path_generators' => [
|
||||||
|
// Model::class => PathGenerator::class
|
||||||
|
// or
|
||||||
|
// 'model_morph_alias' => PathGenerator::class
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When urls to files get generated, this class will be called. Use the default
|
||||||
|
* if your files are stored locally above the site root or on s3.
|
||||||
|
*/
|
||||||
|
'url_generator' => Spatie\MediaLibrary\Support\UrlGenerator\DefaultUrlGenerator::class,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Moves media on updating to keep path consistent. Enable it only with a custom
|
||||||
|
* PathGenerator that uses, for example, the media UUID.
|
||||||
|
*/
|
||||||
|
'moves_media_on_update' => false,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Whether to activate versioning when urls to files get generated.
|
||||||
|
* When activated, this attaches a ?v=xx query string to the URL.
|
||||||
|
*/
|
||||||
|
'version_urls' => false,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The media library will try to optimize all converted images by removing
|
||||||
|
* metadata and applying a little bit of compression. These are
|
||||||
|
* the optimizers that will be used by default.
|
||||||
|
*/
|
||||||
|
'image_optimizers' => [
|
||||||
|
Spatie\ImageOptimizer\Optimizers\Jpegoptim::class => [
|
||||||
|
'-m85', // set maximum quality to 85%
|
||||||
|
'--force', // ensure that progressive generation is always done also if a little bigger
|
||||||
|
'--strip-all', // this strips out all text information such as comments and EXIF data
|
||||||
|
'--all-progressive', // this will make sure the resulting image is a progressive one
|
||||||
|
],
|
||||||
|
Spatie\ImageOptimizer\Optimizers\Pngquant::class => [
|
||||||
|
'--force', // required parameter for this package
|
||||||
|
],
|
||||||
|
Spatie\ImageOptimizer\Optimizers\Optipng::class => [
|
||||||
|
'-i0', // this will result in a non-interlaced, progressive scanned image
|
||||||
|
'-o2', // this set the optimization level to two (multiple IDAT compression trials)
|
||||||
|
'-quiet', // required parameter for this package
|
||||||
|
],
|
||||||
|
Spatie\ImageOptimizer\Optimizers\Svgo::class => [
|
||||||
|
'--disable=cleanupIDs', // disabling because it is known to cause troubles
|
||||||
|
],
|
||||||
|
Spatie\ImageOptimizer\Optimizers\Gifsicle::class => [
|
||||||
|
'-b', // required parameter for this package
|
||||||
|
'-O3', // this produces the slowest but best results
|
||||||
|
],
|
||||||
|
Spatie\ImageOptimizer\Optimizers\Cwebp::class => [
|
||||||
|
'-m 6', // for the slowest compression method in order to get the best compression.
|
||||||
|
'-pass 10', // for maximizing the amount of analysis pass.
|
||||||
|
'-mt', // multithreading for some speed improvements.
|
||||||
|
'-q 90', // quality factor that brings the least noticeable changes.
|
||||||
|
],
|
||||||
|
Spatie\ImageOptimizer\Optimizers\Avifenc::class => [
|
||||||
|
'-a cq-level=23', // constant quality level, lower values mean better quality and greater file size (0-63).
|
||||||
|
'-j all', // number of jobs (worker threads, "all" uses all available cores).
|
||||||
|
'--min 0', // min quantizer for color (0-63).
|
||||||
|
'--max 63', // max quantizer for color (0-63).
|
||||||
|
'--minalpha 0', // min quantizer for alpha (0-63).
|
||||||
|
'--maxalpha 63', // max quantizer for alpha (0-63).
|
||||||
|
'-a end-usage=q', // rate control mode set to Constant Quality mode.
|
||||||
|
'-a tune=ssim', // SSIM as tune the encoder for distortion metric.
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These generators will be used to create an image of media files.
|
||||||
|
*/
|
||||||
|
'image_generators' => [
|
||||||
|
Spatie\MediaLibrary\Conversions\ImageGenerators\Image::class,
|
||||||
|
Spatie\MediaLibrary\Conversions\ImageGenerators\Webp::class,
|
||||||
|
Spatie\MediaLibrary\Conversions\ImageGenerators\Avif::class,
|
||||||
|
Spatie\MediaLibrary\Conversions\ImageGenerators\Pdf::class,
|
||||||
|
Spatie\MediaLibrary\Conversions\ImageGenerators\Svg::class,
|
||||||
|
Spatie\MediaLibrary\Conversions\ImageGenerators\Video::class,
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The path where to store temporary files while performing image conversions.
|
||||||
|
* If set to null, storage_path('media-library/temp') will be used.
|
||||||
|
*/
|
||||||
|
'temporary_directory_path' => null,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The engine that should perform the image conversions.
|
||||||
|
* Should be either `gd` or `imagick`.
|
||||||
|
*/
|
||||||
|
'image_driver' => env('IMAGE_DRIVER', 'gd'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FFMPEG & FFProbe binaries paths, only used if you try to generate video
|
||||||
|
* thumbnails and have installed the php-ffmpeg/php-ffmpeg composer
|
||||||
|
* dependency.
|
||||||
|
*/
|
||||||
|
'ffmpeg_path' => env('FFMPEG_PATH', '/usr/bin/ffmpeg'),
|
||||||
|
'ffprobe_path' => env('FFPROBE_PATH', '/usr/bin/ffprobe'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The timeout (in seconds) that will be used when generating video
|
||||||
|
* thumbnails via FFMPEG.
|
||||||
|
*/
|
||||||
|
'ffmpeg_timeout' => env('FFMPEG_TIMEOUT', 900),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The number of threads that FFMPEG should use. 0 means that FFMPEG
|
||||||
|
* may decide itself.
|
||||||
|
*/
|
||||||
|
'ffmpeg_threads' => env('FFMPEG_THREADS', 0),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Here you can override the class names of the jobs used by this package. Make sure
|
||||||
|
* your custom jobs extend the ones provided by the package.
|
||||||
|
*/
|
||||||
|
'jobs' => [
|
||||||
|
'perform_conversions' => Spatie\MediaLibrary\Conversions\Jobs\PerformConversionsJob::class,
|
||||||
|
'generate_responsive_images' => Spatie\MediaLibrary\ResponsiveImages\Jobs\GenerateResponsiveImagesJob::class,
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When using the addMediaFromUrl method you may want to replace the default downloader.
|
||||||
|
* This is particularly useful when the url of the image is behind a firewall and
|
||||||
|
* need to add additional flags, possibly using curl.
|
||||||
|
*/
|
||||||
|
'media_downloader' => Spatie\MediaLibrary\Downloaders\DefaultDownloader::class,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When using the addMediaFromUrl method the SSL is verified by default.
|
||||||
|
* This is option disables SSL verification when downloading remote media.
|
||||||
|
* Please note that this is a security risk and should only be false in a local environment.
|
||||||
|
*/
|
||||||
|
'media_downloader_ssl' => env('MEDIA_DOWNLOADER_SSL', true),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The default lifetime in minutes for temporary urls.
|
||||||
|
* This is used when you call the `getLastTemporaryUrl` or `getLastTemporaryUrl` method on a media item.
|
||||||
|
*/
|
||||||
|
'temporary_url_default_lifetime' => env('MEDIA_TEMPORARY_URL_DEFAULT_LIFETIME', 5),
|
||||||
|
|
||||||
|
'remote' => [
|
||||||
|
/*
|
||||||
|
* Any extra headers that should be included when uploading media to
|
||||||
|
* a remote disk. Even though supported headers may vary between
|
||||||
|
* different drivers, a sensible default has been provided.
|
||||||
|
*
|
||||||
|
* Supported by S3: CacheControl, Expires, StorageClass,
|
||||||
|
* ServerSideEncryption, Metadata, ACL, ContentEncoding
|
||||||
|
*/
|
||||||
|
'extra_headers' => [
|
||||||
|
'CacheControl' => 'max-age=604800',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
'responsive_images' => [
|
||||||
|
/*
|
||||||
|
* This class is responsible for calculating the target widths of the responsive
|
||||||
|
* images. By default we optimize for filesize and create variations that each are 30%
|
||||||
|
* smaller than the previous one. More info in the documentation.
|
||||||
|
*
|
||||||
|
* https://docs.spatie.be/laravel-medialibrary/v9/advanced-usage/generating-responsive-images
|
||||||
|
*/
|
||||||
|
'width_calculator' => Spatie\MediaLibrary\ResponsiveImages\WidthCalculator\FileSizeOptimizedWidthCalculator::class,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* By default rendering media to a responsive image will add some javascript and a tiny placeholder.
|
||||||
|
* This ensures that the browser can already determine the correct layout.
|
||||||
|
* When disabled, no tiny placeholder is generated.
|
||||||
|
*/
|
||||||
|
'use_tiny_placeholders' => true,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This class will generate the tiny placeholder used for progressive image loading. By default
|
||||||
|
* the media library will use a tiny blurred jpg image.
|
||||||
|
*/
|
||||||
|
'tiny_placeholder_generator' => Spatie\MediaLibrary\ResponsiveImages\TinyPlaceholderGenerator\Blurred::class,
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When enabling this option, a route will be registered that will enable
|
||||||
|
* the Media Library Pro Vue and React components to move uploaded files
|
||||||
|
* in a S3 bucket to their right place.
|
||||||
|
*/
|
||||||
|
'enable_vapor_uploads' => env('ENABLE_MEDIA_LIBRARY_VAPOR_UPLOADS', false),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When converting Media instances to response the media library will add
|
||||||
|
* a `loading` attribute to the `img` tag. Here you can set the default
|
||||||
|
* value of that attribute.
|
||||||
|
*
|
||||||
|
* Possible values: 'lazy', 'eager', 'auto' or null if you don't want to set any loading instruction.
|
||||||
|
*
|
||||||
|
* More info: https://css-tricks.com/native-lazy-loading/
|
||||||
|
*/
|
||||||
|
'default_loading_attribute_value' => null,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* You can specify a prefix for that is used for storing all media.
|
||||||
|
* If you set this to `/my-subdir`, all your media will be stored in a `/my-subdir` directory.
|
||||||
|
*/
|
||||||
|
'prefix' => env('MEDIA_PREFIX', ''),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When forcing lazy loading, media will be loaded even if you don't eager load media and you have
|
||||||
|
* disabled lazy loading globally in the service provider.
|
||||||
|
*/
|
||||||
|
'force_lazy_loading' => env('FORCE_MEDIA_LIBRARY_LAZY_LOADING', true),
|
||||||
|
];
|
||||||
32
database/migrations/2026_01_02_160151_create_media_table.php
Normal file
32
database/migrations/2026_01_02_160151_create_media_table.php
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('media', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
|
||||||
|
$table->morphs('model');
|
||||||
|
$table->uuid()->nullable()->unique();
|
||||||
|
$table->string('collection_name');
|
||||||
|
$table->string('name');
|
||||||
|
$table->string('file_name');
|
||||||
|
$table->string('mime_type')->nullable();
|
||||||
|
$table->string('disk');
|
||||||
|
$table->string('conversions_disk')->nullable();
|
||||||
|
$table->unsignedBigInteger('size');
|
||||||
|
$table->json('manipulations');
|
||||||
|
$table->json('custom_properties');
|
||||||
|
$table->json('generated_conversions');
|
||||||
|
$table->json('responsive_images');
|
||||||
|
$table->unsignedInteger('order_column')->nullable()->index();
|
||||||
|
|
||||||
|
$table->nullableTimestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
10
docs/decisions/004-spatie-media-library
Normal file
10
docs/decisions/004-spatie-media-library
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
# 2026-01-02
|
||||||
|
|
||||||
|
```bash
|
||||||
|
php artisan storage:link
|
||||||
|
composer require "spatie/laravel-medialibrary"
|
||||||
|
composer require filament/spatie-laravel-media-library-plugin:"^4.0" -W
|
||||||
|
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-config"
|
||||||
|
php artisan migrate
|
||||||
|
```
|
||||||
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
console.log('App.js is loaded');
|
||||||
Loading…
Add table
Add a link
Reference in a new issue