Spatie laravel media library 라라벨 이미지 첨부하기
2025-03-10 |
Spatie laravel media library 라라벨 이미지 첨부하기
라라벨 미디어 라이브러리
Spatie Laravel media library 패키지 설치
아래 명령을 이용해 Spatie laravle media library 패키지를 설치해준다.
composer require "spatie/laravel-medialibrary"
마이그레이션 파일 생성
media 테이블을 생성해주려면 마이그레이션 파일이 필요하다. 아래 명령을 통해 마이그레이션 파일을 생성하면, 다른 테이블과 연계하여 처리할 수 있도록 설정된 마이그레이션 파일이 생성된다.
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-migrations"
Media 테이블 생성
이제 마이그레이션을 적용해 media 테이블을 만들어준다.
php artisan migrate
연결할 모델 설정
이제 이미지와 연결할 모델을 설정해주어야 한다. 지금 경우엔 블로그 포스트에 이미지 첨부 기능을 추가할 것이기 때문에, Post 모델과 연결해준다. Post 모델은 이미 생성되어있는 상태이다.
// app/Models/Post.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\Image\Enums\Fit;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
class Post extends Model implements HasMedia // 필요
{
// 필요
use InteractsWithMedia;
}
Post 모델 클래스에 implements로 HasMedia를 구성해주고, use interactWithMedia를 선언해 사용할 준비를 갖춘다. 이 선언을 통해 Media 테이블이 Post 테이블과 관계가 형성되어 유연하게 동작한다.
구성파일 생성
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-config"
이미지 최적화를 도와주는 이미지 처리 패키지 설치
composer require spatie/laravel-image-optimizer
sudo apt install jpegoptim optipng pngquant gifsicle libavif-bin
npm install -g svgo #또는 아래 옵션
sudo snap install svgo #npm 패키지 대신 선택 가능