letoceiling-coder / media
Laravel Media Manager Package - управление медиа-файлами с поддержкой папок, корзины, фильтрации, Vue компонентов и многоязычности
Installs: 13
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
Language:Vue
pkg:composer/letoceiling-coder/media
Requires
- php: ^8.2
- laravel/framework: ^12.0
Requires (Dev)
- phpunit/phpunit: ^11.5
README
Пакет для управления медиа-файлами в Laravel с поддержкой папок, корзины, фильтрации, многопользовательского режима, Vue компонентов и многоязычности.
Версия: 1.2.0 | Laravel: >= 12.0 | PHP: >= 8.2
Возможности
- 📁 Управление папками - создание, редактирование, удаление папок с поддержкой иерархии
- 📄 Загрузка файлов - поддержка изображений, видео, документов и других типов файлов
- 🗑️ Корзина - мягкое удаление файлов и папок с возможностью восстановления
- 🔍 Фильтрация и поиск - поиск по имени, фильтрация по типу, расширению, папке
- 👥 Многопользовательский режим - изоляция файлов по пользователям с поддержкой общих папок
- 📊 Пагинация - настраиваемая пагинация для больших списков
- 🔐 Безопасность - защита системных папок, валидация типов файлов
- 🎨 Vue компоненты - готовые Vue 3 компоненты для управления медиа-файлами с drag & drop, превью, редактированием изображений
- 🌍 Многоязычность - поддержка 8 языков (ru, en, fr, it, de, ko, zh, es) для Vue компонентов
Требования
- PHP >= 8.2
- Laravel >= 12.0
- MySQL/MariaDB или PostgreSQL
Установка
Через Composer
composer require letoceiling-coder/media
Публикация конфигурации
php artisan vendor:publish --tag=media-config
Публикация миграций
php artisan vendor:publish --tag=media-migrations
Публикация системных изображений
Системные изображения автоматически копируются при установке пакета. Для ручного копирования используйте:
php artisan media:publish-assets
Или стандартную команду Laravel:
php artisan vendor:publish --tag=media-assets
Публикация Vue компонентов
Пакет включает Vue компоненты для управления медиа-файлами. Для их публикации используйте:
php artisan vendor:publish --tag=media-vue-components
Компоненты будут скопированы в resources/js/vendor/media/, включая:
- Компоненты (
components/) - Утилиты (
utils/) - Composables (
composables/) - Переводы (
locales/) - поддержка 8 языков
Важно: После публикации компонентов вам нужно:
- Установить зависимости:
npm install fslightbox-vue vue-advanced-cropper sweetalert2 - Адаптировать пути импорта под структуру вашего проекта
- См. подробные инструкции в файле
VUE_COMPONENTS.md - См. документацию по переводам в файле
I18N.md
Для принудительного копирования (перезаписать существующие):
php artisan vendor:publish --tag=media-vue-components --force php artisan media:publish-assets --force
Запуск миграций
php artisan migrate
Конфигурация
После публикации конфигурации файл будет доступен в config/media.php.
Важно: Если вы получили ошибку Auth guard [api] is not defined, см. раздел Настройка авторизации ниже.
Основные настройки:
Загрузка файлов
'upload' => [ 'max_size' => 10240, // Максимальный размер в KB (10 МБ) 'allowed_mime_types' => [...], // Разрешенные MIME типы 'allowed_extensions' => [...], // Разрешенные расширения 'allow_all_types' => false, // Разрешить все типы файлов ],
Безопасность
'security' => [ 'require_auth' => true, // Требовать авторизацию 'auth_guard' => 'api', // Guard для авторизации (api, sanctum, web) 'middleware' => ['api'], // Middleware для роутов 'allow_delete' => true, // Разрешить удаление 'allow_edit' => true, // Разрешить редактирование 'allow_move' => true, // Разрешить перемещение ],
Важно: Если вы получили ошибку Auth guard [api] is not defined, см. раздел Настройка авторизации ниже.
Хранилище
'storage' => [ 'disk' => 'public', // Диск для хранения 'upload_path' => 'upload', // Путь для загрузки 'folder_images_path' => 'system', // Путь к системным изображениям ],
Настройка авторизации
Важно: Пакет автоматически определяет доступные guard'ы и использует подходящий. Если вы получили ошибку Auth guard [api] is not defined, выполните одно из следующих действий:
Вариант 1: Настройте guard 'api' в config/auth.php
// config/auth.php 'guards' => [ 'api' => [ 'driver' => 'sanctum', // или 'token', 'passport' 'provider' => 'users', ], ],
Вариант 2: Измените guard в config/media.php
// config/media.php 'security' => [ 'require_auth' => true, 'auth_guard' => 'sanctum', // или 'web' 'middleware' => ['api'], // или ['web'] ],
Вариант 3: Отключите авторизацию (только для тестирования)
// config/media.php 'security' => [ 'require_auth' => false, ],
Пакет автоматически попробует использовать guard'ы в следующем порядке:
- Указанный в
auth_guard(по умолчаниюapi) sanctum(если доступен)web(если доступен)- Стандартный
authmiddleware (если ни один guard не найден)
Подробные инструкции см. в CONFIGURATION.md
Использование
API Endpoints
Папки
GET /api/folders- Список папокPOST /api/folders- Создать папкуGET /api/folders/{id}- Информация о папкеPUT /api/folders/{id}- Обновить папкуDELETE /api/folders/{id}- Удалить папкуPOST /api/folders/{id}/restore- Восстановить папкуGET /api/folders/tree/all- Дерево папокPOST /api/folders/update-positions- Обновить позиции
Медиа-файлы
GET /api/media- Список файловPOST /api/media- Загрузить файлGET /api/media/{id}- Информация о файлеPUT /api/media/{id}- Обновить файлDELETE /api/media/{id}- Удалить файлPOST /api/media/{id}/restore- Восстановить файлDELETE /api/media/trash/empty- Очистить корзину
Примеры использования
Загрузка файла
use LetoCeilingCoder\Media\Models\Media; use LetoCeilingCoder\Media\Models\Folder; // Загрузка через API POST /api/media Content-Type: multipart/form-data file: [файл] folder_id: 1 (опционально)
Работа с моделями
use LetoCeilingCoder\Media\Models\Media; use LetoCeilingCoder\Media\Models\Folder; // Получить все файлы пользователя $files = Media::all(); // Получить файлы в папке $files = Media::inFolder(1)->get(); // Получить папки пользователя $folders = Folder::whereNull('parent_id')->get(); // Создать папку $folder = Folder::create([ 'name' => 'Новая папка', 'parent_id' => null, ]); // Получить корзину $trashFolder = Folder::getTrashFolder();
Фильтрация
use LetoCeilingCoder\Media\Filters\FolderFilter; // Фильтрация папок $filter = app()->make(FolderFilter::class, [ 'queryParams' => ['user_id' => 1, 'name' => 'Test'] ]); $folders = Folder::filter($filter)->get();
Ресурсы
use LetoCeilingCoder\Media\Resources\MediaResource; use LetoCeilingCoder\Media\Resources\FolderResource; // Преобразование в JSON return new MediaResource($media); return FolderResource::collection($folders);
Структура базы данных
Таблица folders
id- ID папкиname- Название папкиslug- URL-слагsrc- Иконка папкиparent_id- ID родительской папкиposition- Позиция для сортировкиprotected- Защищенная папкаis_trash- Является ли корзинойuser_id- ID пользователяcreated_at,updated_at,deleted_at
Таблица media
id- ID файлаname- Имя файлаoriginal_name- Оригинальное имяextension- Расширениеdisk- Диск храненияwidth,height- Размеры (для изображений)type- Тип файла (photo, video, document)size- Размер в байтахfolder_id- ID папкиoriginal_folder_id- ID оригинальной папки (для корзины)user_id- ID пользователяmetadata- Дополнительные данные (JSON)temporary- Временный файлcreated_at,updated_at,deleted_at
Многопользовательский режим
Пакет автоматически фильтрует файлы и папки по пользователю через глобальный scope UserScope.
Обход фильтрации
// Получить все файлы (для администратора) $allFiles = Media::allUsers()->get(); // Получить файлы конкретного пользователя $userFiles = Media::forUser($userId)->get(); // Получить без учета пользователя $files = Media::withoutUserScope()->get();
Системные папки
Системные папки (с user_id = NULL) доступны всем пользователям. Корзина также общая для всех.
Безопасность
- Валидация типов файлов при загрузке
- Защита системных папок от удаления
- Защита корзины от прямого добавления файлов
- Авторизация через middleware (настраивается)
Лицензия
MIT
Автор
LetoCeiling Coder
Документация
- QUICK_START.md - Быстрый старт
- INSTALLATION.md - Подробная инструкция по установке
- VUE_COMPONENTS.md - Документация по Vue компонентам
- I18N.md - Документация по переводам (i18n)
- CONFIGURATION.md - Настройка пакета
- UPDATE.md - Инструкции по обновлению
- CHANGELOG.md - История изменений
Поддержка
GitHub: https://github.com/letoceiling-coder/media
Vue компоненты
Пакет включает готовые Vue 3 компоненты для управления медиа-файлами:
-
Media.vue - Полнофункциональный медиа-менеджер с:
- Drag & Drop загрузкой файлов
- Превью изображений и видео
- Режимом выбора файлов
- Поиском и фильтрацией
- Пагинацией
- Управлением папками
- Работой с корзиной
-
ImageEditor.vue - Редактор изображений с:
- Обрезкой изображений
- Поворотом и отражением
- Изменением размера
- Настройкой качества
- Экспортом в разные форматы
Подробные инструкции по использованию см. в VUE_COMPONENTS.md
История изменений (Changelog)
Версия 1.2.2 (Текущая версия)
Исправлено
- 🔧 Исправлена проблема с обрезкой изображения в ImageEditor
- Теперь обрезанное изображение правильно сохраняется
- Улучшено извлечение canvas из результата cropper
- 🔧 Исправлена проблема с сохранением
folder_idпри обновлении файла- Файл теперь сохраняется в той же папке, где был изначально
folder_idне теряется при редактировании и сохранении изображения
Версия 1.2.1
Исправлено
- 🔧 Исправлена проблема с потерей
folder_idпри обновлении файла через ImageEditor - 🔧 Исправлена проблема с обновлением файла при обрезании изображения
- Улучшено удаление старого файла
- Добавлено версионирование URL для предотвращения кэширования
Версия 1.2.0
Добавлено
- 🌍 Многоязычная поддержка (i18n) для Vue компонентов
- Поддержка 8 языков: русский, английский, французский, итальянский, немецкий, корейский, китайский, испанский
- Composable
useI18nдля работы с переводами - Автоматическое определение языка из браузера или localStorage
- Совместимость с vue-i18n (опционально)
- Документация
I18N.mdс примерами использования
Изменено
- Обновлена документация
VUE_COMPONENTS.mdс информацией о i18n - Обновлен
README.mdс упоминанием многоязычной поддержки - Обновлен
INSTALLATION.mdс информацией о переводах
Версия 1.1.1
Исправлено
- 🔧 Исправлена ошибка "Auth guard [api] is not defined"
- Добавлена автоматическая проверка существования guard
- Fallback на
sanctum,webили стандартныйauthmiddleware - Гибкая настройка через
config/media.php
Добавлено
- 📝 Файл
CONFIGURATION.mdс подробными инструкциями по настройке авторизации - 📝 Обновлена документация с решениями проблем авторизации
Версия 1.1.0
Добавлено
- ✨ Vue 3 компоненты для управления медиа-файлами
Media.vue- полнофункциональный медиа-менеджерImageEditor.vue- редактор изображений с обрезкой и редактированием
- ✨ Утилиты для работы с API (
resources/js/utils/api.js) - ✨ Composable для работы с токеном авторизации (
resources/js/composables/useAuthToken.js) - ✨ Публикация Vue компонентов через
vendor:publish --tag=media-vue-components - 📝 Документация по использованию Vue компонентов (
VUE_COMPONENTS.md)
Изменено
- Улучшена автоматическая публикация системных изображений
- Обновлена документация с информацией о Vue компонентах
- Обновлено описание пакета в
composer.json
Версия 1.0.0
Добавлено
- Управление папками (создание, редактирование, удаление, иерархия)
- Загрузка и управление медиа-файлами
- Корзина с возможностью восстановления
- Многопользовательский режим с изоляцией файлов
- Фильтрация и поиск файлов и папок
- Пагинация для больших списков
- Защита системных папок
- Валидация типов файлов
- API endpoints для работы с папками и файлами
- Автоматическая публикация системных изображений
- Команда
media:publish-assetsдля публикации изображений
Подробный список изменений см. в CHANGELOG.md