Laravel Filament — админ-панель
Laravel Filament — админ-панель
В Livewire вы собирали кнопки, поля и списки вручную. Filament — готовая админ-панель поверх Livewire — таблицы с сортировкой и поиском, формы создания и редактирования, удаление, фильтры — из одного PHP-класса Resource.
Типичный сценарий: публичный сайт на Blade/Livewire, а внутренняя панель /admin для менеджеров — на Filament.
| Задача | Инструмент |
|---|---|
| Публичный сайт, мало форм | Blade + 1431 |
| Интерактив на Laravel | Livewire 1434 |
| Внутренняя админка, CRUD сущностей | Filament (эта статья) |
| Отдельный React/Vue | Sanctum 1433 |
Что такое Resource
Resource в Filament — описание одной модели Eloquent для админки:
- какие поля в форме (
form()); - какие колонки в таблице (
table()); - какие страницы — список, создать, редактировать (
getPages()).
Filament генерирует UI сам; писать десятки Blade-файлов для каждой сущности не нужно.
Подготовка модели Task
Нужен Laravel-проект с моделью Task (как в Laravel и Livewire):
php artisan make:model Task -m
Разбор:
- Команда одновременно создает модель
Taskи миграцию для таблицы. - Такой старт важен для Filament, потому что Resource строится поверх Eloquent-модели.
- Дальше структура данных и UI-конфигурация двигаются синхронно.
В миграции:
$table->string('title');
$table->boolean('done')->default(false);
Разбор:
titleхранит текст задачи и выступает основным полем в форме/таблице админки.doneзадает булев статус выполнения задачи.default(false)делает создание записи предсказуемым: новая задача изначально не выполнена.
php artisan migrate
Разбор:
- Применяет миграцию и создает таблицу в базе данных.
- После этого Filament сможет читать и изменять сущности через Resource.
- Без миграции CRUD-страницы будут падать на запросах к отсутствующей таблице.
app/Models/Task.php:
protected $fillable = ['title', 'done'];
Разбор:
$fillableразрешает массовое присваивание полей из формы Filament.- Если поле не указано, Laravel защитит его и не запишет в БД.
- Это одновременно и безопасность, и причина частой ошибки "поле не сохраняется".
$fillable обязателен — иначе Filament не сохранит поля из формы.
Установка Filament
composer require filament/filament:"^3.2" -W
php artisan filament:install --panels
Разбор:
composer require ... -Wдобавляет Filament и разрешает обновление зависимостей до совместимых версий.filament:install --panelsнастраивает панель администратора и маршруты/admin.- После установки проект получает готовый каркас админки на базе Livewire-компонентов.
Мастер создаёт панель admin (маршруты, layout, стили).
php artisan serve
Разбор:
- Запускает локальный сервер разработки Laravel.
- Нужен для проверки панели Filament в браузере по адресу
/admin. - В связке с
make:filament-userпозволяет сразу пройти полный цикл входа в админку.
Откройте /admin. Создайте пользователя:
php artisan make:filament-user
Разбор:
- Команда создает учетную запись администратора для входа в панель.
- Filament использует стандартную таблицу
users, поэтому отдельный auth-модуль не нужен. - Это быстрый способ безопасно ограничить доступ к внутреннему интерфейсу.
В Filament 3 вход — по email и паролю из таблицы users, как в обычном Laravel.
Resource для Task
php artisan make:filament-resource Task --generate
Разбор:
- Команда создает Resource-класс и страницы CRUD для модели
Task. - Флаг
--generateпытается автоматически собрать стартовую схему формы и таблицы. - Это сильно сокращает ручную работу на этапе каркаса админки.
--generate подставляет поля из миграции/модели в черновик формы и таблицы.
Фрагмент app/Filament/Resources/TaskResource.php:
Код ITЗагрузка примера кода…
Разбор:
$model = Task::classсвязывает Resource с конкретной Eloquent-моделью.form()->schema([...])задает поля формы создания/редактирования, включая валидацию (required,maxLength).table()->columns([...])определяет отображение списка, поиск, сортировки и типы колонок.actionsдобавляет действия по строке (редактирование/удаление),bulkActions— групповые операции.getPages()описывает маршруты страниц Resource внутри/admin/tasks.- В сумме класс полностью описывает CRUD-поведение без ручной верстки Blade-страниц.
Разбор блоков
| Метод | Назначение |
|---|---|
$model | С какой Eloquent-моделью работает Resource |
form()->schema([...]) | Поля на страницах Create/Edit |
table()->columns([...]) | Колонки списка; searchable() — строка поиска |
actions | Кнопки в строке (редактировать, удалить) |
bulkActions | Действия над выделенными строками |
getPages() | URL внутри /admin/tasks/... |
В боковом меню панели появится пункт Tasks с полным CRUD.
Связь Filament и Livewire
Filament строит интерфейс из компонентов Livewire (TextInput, TextColumn). Вы можете:
- держать публичный каталог на своём Livewire-компоненте;
- вести справочник задач в Filament на
/admin.
Оба подхода живут в одном composer.json и одной БД.
Права доступа
По умолчанию в панель входят пользователи из users. Для учебного проекта достаточно одного админа.
В production подключают Policies, роли (Spatie Laravel Permission) или встроенные хуки Filament canAccessPanel(). Тема прав — отдельная статья; для старта важно: URL /admin не публикуйте без авторизации в интернете.
Частые ошибки
| Симптом | Причина |
|---|---|
404 на /admin | Не выполнен filament:install --panels |
| Пустое меню | Resource не в App\Filament\Resources или опечатка в namespace |
| 403 при входе | Нет пользователя — make:filament-user |
| Поле не сохраняется | Нет в $fillable или не добавлено в form() |
Что попробовать
ToggleColumn::make('done')— переключатель прямо в таблице.Tables\Filters\TernaryFilter::make('done')— фильтр "выполнено / нет".- Публичный список — Livewire, правки данных — Filament.
Связанные материалы
Организация админки по стандартам команды
Filament помогает быстро стартовать, а структура Resource делает код единообразным между модулями.
Рекомендуемый порядок для новой сущности
- Сначала модель и миграция.
- Затем
make:filament-resource. - После генерации добавляйте валидацию и права доступа.
- Финальный шаг — feature-тесты ключевого CRUD-сценария.
Такой конвейер стабилизирует качество даже при высокой скорости разработки.
Полезные расширения Filament
RelationManagerдля связанных сущностей (например, задача и комментарии).Widgetдля метрик: количество новых задач, просроченные элементы.Form-компоненты с масками,Select,DatePickerдля более строгого ввода.
Для прав и очередей используйте материалы Laravel — очереди и политики, для тестов — PHPUnit и тестирование PHP, для общей архитектуры — Laravel - MVC-фреймворк и паттерны проектирования.