Перейти к основному содержимому

Laravel Filament — админ-панель

Разработчику

Laravel Filament — админ-панель

В Livewire вы собирали кнопки, поля и списки вручную. Filament — готовая админ-панель поверх Livewire — таблицы с сортировкой и поиском, формы создания и редактирования, удаление, фильтры — из одного PHP-класса Resource.

Типичный сценарий: публичный сайт на Blade/Livewire, а внутренняя панель /admin для менеджеров — на Filament.

ЗадачаИнструмент
Публичный сайт, мало формBlade + 1431
Интерактив на LaravelLivewire 1434
Внутренняя админка, CRUD сущностейFilament (эта статья)
Отдельный React/VueSanctum 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()

Что попробовать

  1. ToggleColumn::make('done') — переключатель прямо в таблице.
  2. Tables\Filters\TernaryFilter::make('done') — фильтр "выполнено / нет".
  3. Публичный список — Livewire, правки данных — Filament.

Связанные материалы


Организация админки по стандартам команды

Filament помогает быстро стартовать, а структура Resource делает код единообразным между модулями.


Рекомендуемый порядок для новой сущности

  1. Сначала модель и миграция.
  2. Затем make:filament-resource.
  3. После генерации добавляйте валидацию и права доступа.
  4. Финальный шаг — feature-тесты ключевого CRUD-сценария.

Такой конвейер стабилизирует качество даже при высокой скорости разработки.


Полезные расширения Filament

  • RelationManager для связанных сущностей (например, задача и комментарии).
  • Widget для метрик: количество новых задач, просроченные элементы.
  • Form-компоненты с масками, Select, DatePicker для более строгого ввода.

Для прав и очередей используйте материалы Laravel — очереди и политики, для тестов — PHPUnit и тестирование PHP, для общей архитектуры — Laravel - MVC-фреймворк и паттерны проектирования.