Herkese merhaba,
Spatie Laravel/MediaLibrary paketinde resim upload ettiğimizde media tablosunun id değerini alarak klasör ismi haline getiriyor.
Bu yapı kolaylık sağlıyor, dosya isimlerinin aynı olmasını düşünmeye de gerek kalmıyor.
Ancak bazı durumlarda klasör isimlerinin model ID'sini almasını istemeyebiliriz.
Bu durumda bu yapıyı özelleştirmek için bize bir seçenek sunulmuş;
https://spatie.be/docs/laravel-medialibrary/v10/advanced-usage/using-a-custom-directory-structure
Bende bu yapıyı özelleştirerek, id yerine uuid kullanılmasını sağladım.
Öncelikle yapmadıysanız, config dosyasını basıyoruz;
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="config"
Şimdi kendi CustomPathGenerator servisimizi yazalım.
app/Services/CustomPathGenerator.php
<?php
namespace App\Services;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\MediaLibrary\Support\PathGenerator\PathGenerator;
class CustomPathGenerator implements PathGenerator
{
public function getPath(Media $media): string
{
return $media->uuid.'/';
}
public function getPathForConversions(Media $media): string
{
return $media->uuid.'/conversions/';
}
public function getPathForResponsiveImages(Media $media): string
{
return $media->uuid.'/responsive-images/';
}
}
Şimdi config/media-library.php dosyasmızın içerisine gidelim ve ilgili satırları aşağıdaki şekilde güncelleyelim;
/*
* The class that contains the strategy for determining a media file's path.
*/
'path_generator' => \App\Services\CustomPathGenerator::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' => true,
Tabii UUID kullanılınca klasör isimleri ne derece güzel oldu tartışılır 😃
Farklı önerisi/tavsiyesi olan arkadaşlarda yazabilirse sevinirim.
Belki daha iyi seçeneklerimiz vardır?