PHP code example of crumbls / filament-media-library
1. Go to this page and download the library: Download crumbls/filament-media-library library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
crumbls / filament-media-library example snippets
use Crumbls\FilamentMediaLibrary\FilamentMediaLibraryPlugin;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->plugins([
FilamentMediaLibraryPlugin::make(),
]);
}
// config/filament-media-library.php
return [
// Storage disk (any disk defined in config/filesystems.php)
'disk' => env('MEDIA_LIBRARY_DISK', 'public'),
// Allowed upload types (glob-style MIME matching)
'accepted_file_types' => ['image/*', 'video/*', 'application/pdf'],
// Max upload size in kilobytes
'max_file_size' => 10240,
// Automatic image conversions
'image_conversions' => [
'thumbnail' => ['width' => 150, 'height' => 150],
'medium' => ['width' => 300, 'height' => 300],
'large' => ['width' => 1024, 'height' => 1024],
],
// Named collections (for future use)
'collections' => [],
// Swap the Media model with your own
'models' => [
'media' => \Crumbls\FilamentMediaLibrary\Models\Media::class,
],
// Filament navigation
'filament' => [
'navigation_group' => null,
'navigation_icon' => 'heroicon-o-photo',
'navigation_sort' => null,
'navigation_label' => 'Media Library',
],
];
use Crumbls\FilamentMediaLibrary\Traits\HasMediaLibrary;
class Post extends Model
{
use HasMediaLibrary;
}
$post = Post::find(1);
// Attach a single media item
$post->attachMedia($mediaId);
// Attach with a named collection
$post->attachMedia($mediaId, 'featured-image');
// Attach with explicit order
$post->attachMedia($mediaId, 'gallery', order: 3);
// Attach multiple at once (order is auto-incremented)
$post->attachMediaMany([$mediaId1, $mediaId2, $mediaId3]);
// Attach multiple to a specific collection
$post->attachMediaMany([$mediaId1, $mediaId2], 'gallery');
// Detach media
$post->detachMedia($mediaId);
// Detach from a specific collection only
$post->detachMedia($mediaId, 'gallery');
// Sync a collection (replaces existing attachments)
$post->syncMedia([$mediaId1, $mediaId2], 'gallery');
// Query media in a collection
$galleryItems = $post->mediaInCollection('gallery')->get();
// Get all media (default collection)
$media = $post->getMediaByCollection();
// Access the relationship directly
$post->mediaLibrary; // MorphToMany, ordered by pivot 'order'
use Crumbls\FilamentMediaLibrary\Forms\Components\MediaPicker;
public static function form(Schema $schema): Schema
{
return $schema->components([
MediaPicker::make('featured_image_id'),
]);
}
use Crumbls\FilamentMediaLibrary\Models\Media;
public function getAvatarUrl(): ?string
{
if (! $this->avatar) {
return null;
}
$media = Media::with('media')->find($this->avatar);
return $media?->thumbnail_url;
}
use Crumbls\FilamentMediaLibrary\Tables\Columns\MediaColumn;
public static function table(Table $table): Table
{
return $table->columns([
MediaColumn::make('media')
->collection('featured-image')
->size(50)
->circular(),
]);
}
public static function table(Table $table): Table
{
return $table
->modifyQueryUsing(fn ($query) => $query->with('mediaLibrary.media'))
->columns([
MediaColumn::make('media'),
]);
}
use Crumbls\FilamentMediaLibrary\Models\Media;
$media = Media::find(1);
$media->file_url; // Full URL to the original file
$media->thumbnail_url; // Thumbnail conversion URL (falls back to original)
$media->mime_type; // e.g. 'image/jpeg'
$media->file_size; // Size in bytes
$media->file_name; // Stored file name
$media->isImage(); // true for image/* MIME types
$media->isVideo(); // true for video/* MIME types
$media->isPdf(); // true for application/pdf
namespace App\Models;
use Crumbls\FilamentMediaLibrary\Models\Media;
class CustomMedia extends Media
{
// Add custom methods, scopes, or relationships
}