yurizoom/moonshine-media-manager
Composer 安装命令:
composer require yurizoom/moonshine-media-manager
包简介
Media manager for MoonShine
关键字:
README 文档
README
Файловый менеджер для MoonShine.
Поддержка версий
| MoonShine | Пакет | Документация |
|---|---|---|
| 4.0+ | 4.x | Ниже ↓ |
| 4.0+ | 3.x | Ниже ↓ |
| 3.0+ | 2.x | |
| 2.0+ | 1.x |
Скриншоты
| Менеджер | Пикер |
![]() |
![]() |
Установка
composer require yurizoom/moonshine-media-manager
Настройка v4 (MoonShine 4+)
Полностью AJAX — загрузка, удаление, переименование, навигация по папкам без перезагрузки страницы.
После установки опубликуйте ассеты и конфиг:
php artisan vendor:publish --tag=moonshine-media-manager-assets php artisan vendor:publish --tag=moonshine-media-manager-config
Конфигурация
Конфиг публикуется в config/media-manager.php (корневой файл). Поддерживается
fallback — если ключи найдены в config/moonshine.php → media_manager, они
тоже применяются. Приоритет: standalone файл > moonshine.php > дефолты пакета.
// config/media-manager.php return [ 'disk' => config('filesystems.default', 'public'), 'allowed_ext' => 'jpg,jpeg,png,gif,webp,avif,svg,bmp,ico,heic,pdf,doc,docx,xls,xlsx,ppt,pptx,zip,rar,7z,tar,gz,txt,md,csv,json,yaml,yml,mp3,wav,ogg,m4a,aac,flac,mp4,avi,mov,mkv,webm', 'max_file_size' => env('MOONSHINE_MEDIA_MANAGER_MAX_FILE_SIZE', 10 * 1024 * 1024), 'rename_duplicates' => env('MOONSHINE_MEDIA_MANAGER_RENAME_DUPLICATES', true), 'auto_menu' => env('MOONSHINE_MEDIA_MANAGER_AUTO_MENU', true), 'ability' => env('MOONSHINE_MEDIA_MANAGER_ABILITY'), 'default_view' => 'table', ];
Подключение OffCanvas
В app/MoonShine/Layouts/MoonShineLayout.php:
use YuriZoom\MoonShineMediaManager\Components\MediaManagerOffCanvas; final class MoonShineLayout extends AppLayout { protected function getContentComponents(): array { return [ ...parent::getContentComponents(), MediaManagerOffCanvas::make(), ]; } }
MediaManagerOffCanvas — глобальный компонент, рендерит offcanvas-панель с файловым менеджером. Именно через неё работают все picker-поля на страницах. Assets загружаются автоматически через компонент.
Добавление в меню (опционально)
Если auto_menu включён (по умолчанию), пункт появится автоматически. Для ручного размещения:
use YuriZoom\MoonShineMediaManager\Pages\MediaManagerPage; protected function menu(): array { return [ MenuItem::make(MediaManagerPage::class), ]; }
Поле MediaManagerPicker
Поле для выбора файлов из менеджера прямо в форме. Работает с обычными полями, Json и Layouts.
Базовое использование:
use YuriZoom\MoonShineMediaManager\Fields\MediaManagerPicker; // Одно изображение MediaManagerPicker::make('Изображение', 'image') ->allowedTypes(['image']), // Множественный выбор с перетаскиванием MediaManagerPicker::make('Галерея', 'images') ->multiple() ->allowedTypes(['image']),
Фильтрация файлов — по типу или по расширению, можно комбинировать:
// По типу (из менеджера): image, video, audio, pdf, word, code, zip, txt, ppt ->allowedTypes(['image']) ->allowedTypes(['image', 'pdf']) // По расширению (точный контроль): ->allowedExtensions(['jpg', 'png', 'webp']) ->allowedExtensions(['pdf', 'doc', 'docx', 'xls', 'xlsx'])
С Json:
use MoonShine\UI\Fields\Json; Json::make('Мета', 'meta') ->fields([ Text::make('Заголовок', 'title'), MediaManagerPicker::make('Изображение', 'image') ->allowedTypes(['image']), MediaManagerPicker::make('Документ', 'document') ->allowedExtensions(['pdf', 'doc', 'docx']), MediaManagerPicker::make('Файлы', 'files') ->multiple() ->allowedExtensions(['pdf', 'doc', 'docx', 'xls', 'xlsx']), ]),
С Layouts:
use MoonShine\Layouts\Fields\Layouts; Layouts::make('Контент', 'content') ->addLayout('Блок с изображением', 'image_block', [ Text::make('Заголовок', 'title'), MediaManagerPicker::make('Изображение', 'image') ->allowedTypes(['image']), ]) ->addLayout('Файловый блок', 'files_block', [ Text::make('Заголовок', 'title'), MediaManagerPicker::make('Документы', 'documents') ->multiple() ->allowedExtensions(['pdf', 'doc', 'docx', 'xls', 'xlsx']), ]),
Возможности v4
- AJAX навигация — переход по папкам без перезагрузки
- Поиск / фильтр / сортировка — мгновенный поиск по имени, фильтр по типу (Images / Documents / Video / Audio / Archives), сортировка по имени / дате / размеру
- Загрузка файлов — множественная загрузка с проверкой MIME, расширения и размера. Drag-and-drop из файлового менеджера в любую область страницы. Redesigned modal с превью выбранных файлов и размером.
- Replace file — перезапись файла по тому же пути (контент меняется, URL не ломается)
- Move file — перемещение через folder browser без ввода путей вручную
- Создание папок — прямо из интерфейса, с проверкой на существование
- Переименование — с валидацией конфликтов и дубликатов
- Bulk delete — массовое удаление выбранных файлов из selection bar
- Удаление — с подтверждением
- Скачивание — по клику
- URL файла — просмотр ссылки с копированием
- Inline-валидация — ошибки показываются прямо в модалках, всё локализовано
- Два вида — таблица и сетка (grid)
- Пикер запоминает папку — при повторном открытии возвращается в последнюю папку
- Lazy-load — превью загружаются только при скролле к ним
- Cache-busting — после Replace браузер автоматически обновляет изображение
- Picker-поле — выбор файлов из менеджера прямо в форме
- Drag-and-drop reorder — перетаскивание для изменения порядка в picker
- Layouts / Json — полная интеграция с moonshine/layouts-field и Json-полями
Authorization (опционально)
По умолчанию любой аутентифицированный юзер MoonShine имеет полный доступ к менеджеру.
Для ограничения — задайте Gate ability в .env:
MOONSHINE_MEDIA_MANAGER_ABILITY=manage-media
И определите Gate в AuthServiceProvider:
use Illuminate\Support\Facades\Gate; Gate::define('manage-media', function (User $user) { return $user->hasRole('admin'); });
Теперь только админы имеют доступ. Остальные получают 403.
События
Пакет диспатчит события для интеграции с внешним кодом:
| Событие | Когда | Параметры |
|---|---|---|
MediaManagerFileUploaded |
Файл загружен | $path, $disk |
MediaManagerFileReplaced |
Файл заменён (Replace) | $path, $disk |
MediaManagerFileDeleted |
Файл удалён | $path, $disk |
use YuriZoom\MoonShineMediaManager\Events\MediaManagerFileUploaded; protected $listen = [ MediaManagerFileUploaded::class => [ GenerateThumbnailListener::class, ], ];
Конфигурация v4
| Параметр | По умолчанию | Описание |
|---|---|---|
disk |
public |
Диск файлового хранилища (только локальный) |
allowed_ext |
jpg,jpeg,png,... |
Разрешённые расширения (с MIME-проверкой) |
max_file_size |
10485760 (10 MB) |
Макс. размер загружаемого файла |
rename_duplicates |
true |
Переименовать дубликат (file.jpg → file-1.jpg) вместо перезаписи |
auto_menu |
true |
Автоматически добавить в боковое меню |
ability |
null |
Gate ability для авторизации (null = без проверки) |
default_view |
table |
Вид по умолчанию: table или list |
Настройка v3 (MoonShine 4)
Добавьте в config/moonshine.php:
'media_manager' => [ 'auto_menu' => true, 'disk' => config('filesystem.default', 'public'), 'allowed_ext' => 'jpg,jpeg,png,pdf,doc,docx,zip', 'default_view' => 'table', ],
Для добавления в меню:
use YuriZoom\MoonShineMediaManager\Pages\MediaManagerPage; protected function menu(): array { return [ MenuItem::make(new MediaManagerPage()), ]; }
Настройка v2 (MoonShine 3)
Если необходимо изменить настройки, добавьте в файл config/moonshine.php:
[
'media_manager' => [
// Автоматическое добавление в меню
'auto_menu' => true,
// Корневая директория
'disk' => config('filesystem.default', 'public'),
// Разрешенные для загрузки расширения файлов
'allowed_ext' => 'jpg,jpeg,png,pdf,doc,docx,zip',
// Вид менеджера по-умолчанию
'default_view' => 'table',
]
]
Для добавления в меню в app/MoonShine/Layouts/MoonShineLayout.php:
use YuriZoom\MoonShineMediaManager\Pages\MediaManagerPage; protected function menu(): array { return [ MenuItem::make(new MediaManagerPage()), ]; }
Разработка
Для сборки ассетов (JS + CSS) из исходников:
npm install npm run build
Готовые файлы появятся в dist/. Для публикации в проекте:
php artisan vendor:publish --tag=moonshine-media-manager-assets --force
Лицензия
yurizoom/moonshine-media-manager 适用场景与选型建议
yurizoom/moonshine-media-manager 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.17k 次下载、GitHub Stars 达 11, 最近一次更新时间为 2024 年 06 月 09 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「media」 「manager」 「moonshine」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 yurizoom/moonshine-media-manager 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 yurizoom/moonshine-media-manager 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 yurizoom/moonshine-media-manager 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
The file manager intended for using Laravel with CKEditor / TinyMCE / Colorbox
Simple Sharing generates social media share links within CP entry pages, allowing you to quickly & easily share entries.
User permissions for MoonShine
Field for repeating groups of fields for MoonShine
Task scheduling extension for MoonShine
Project builder for MoonShine
统计信息
- 总下载量: 2.17k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 11
- 点击次数: 5
- 依赖项目数: 1
- 推荐数: 1
其他信息
- 授权协议: MIT
- 更新时间: 2024-06-09

