Agent Skills
› relaticle/relaticle
› medialibrary-development
medialibrary-development
GitHub指导在 Laravel 中使用 spatie/laravel-medialibrary 库处理媒体资源,包括模型关联、文件上传、媒体集合定义、图片转换及响应式图像处理等开发任务。
Trigger Scenarios
需要在 Laravel Eloquent 模型中关联和管理文件
实现图片上传、视频处理或生成响应式图片
定义媒体集合或配置图片转换规则
Install
npx skills add relaticle/relaticle --skill medialibrary-development -g -y
SKILL.md
Frontmatter
{
"name": "medialibrary-development",
"license": "MIT",
"metadata": {
"author": "Spatie"
},
"description": "Build and work with spatie\/laravel-medialibrary features including associating files with Eloquent models, defining media collections and conversions, generating responsive images, and retrieving media URLs and paths."
}
Media Library Development
Overview
Use spatie/laravel-medialibrary to associate files with Eloquent models. Supports image/video conversions, responsive images, multiple collections, and various storage disks.
When to Activate
- Activate when working with file uploads, media attachments, or image processing in Laravel.
- Activate when code references
HasMedia,InteractsWithMedia, theMediamodel, or media collections/conversions. - Activate when the user wants to add, retrieve, convert, or manage files attached to Eloquent models.
Scope
- In scope: media uploads, collections, conversions, responsive images, custom properties, file retrieval, path/URL generation.
- Out of scope: general file storage without Eloquent association, non-Laravel frameworks.
Workflow
- Identify the task (model setup, adding media, defining conversions, retrieving files, etc.).
- Read
references/medialibrary-guide.mdand focus on the relevant section. - Apply the patterns from the reference, keeping code minimal and Laravel-native.
Core Concepts
Model Setup
Every model that should have media must implement HasMedia and use the InteractsWithMedia trait:
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
class BlogPost extends Model implements HasMedia
{
use InteractsWithMedia;
}
Adding Media
$blogPost->addMedia($file)->toMediaCollection('images');
$blogPost->addMediaFromUrl($url)->toMediaCollection('images');
$blogPost->addMediaFromRequest('file')->toMediaCollection('images');
Defining Collections
public function registerMediaCollections(): void
{
$this->addMediaCollection('avatar')->singleFile();
$this->addMediaCollection('downloads')->useDisk('s3');
}
Defining Conversions
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\Image\Enums\Fit;
public function registerMediaConversions(?Media $media = null): void
{
$this->addMediaConversion('thumb')
->fit(Fit::Contain, 300, 300)
->nonQueued();
}
Retrieving Media
$url = $model->getFirstMediaUrl('images');
$thumbUrl = $model->getFirstMediaUrl('images', 'thumb');
$allMedia = $model->getMedia('images');
Do and Don't
Do:
- Always implement the
HasMediainterface alongside theInteractsWithMediatrait. - Use
?Media $media = nullas the parameter forregisterMediaConversions(). - Call
->toMediaCollection()to finalize adding media. - Use
->nonQueued()for conversions that should run synchronously. - Use
->singleFile()on collections that should only hold one file. - Use
Spatie\Image\Enums\Fitenum values for fit methods.
Don't:
- Don't forget to run
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-migrations"before migrating. - Don't use
env()for disk configuration; useconfig()or set it inconfig/media-library.php. - Don't call
addMedia()without callingtoMediaCollection()— the media won't be saved. - Don't reference conversion names that aren't registered in
registerMediaConversions().
References
references/medialibrary-guide.md
Version History
- 1f433f8 Current 2026-08-20 14:43


