Почему Filament стал стандартом для Laravel-админок?
Представьте: у вас интернет-магазин на Laravel, нужно добавить админку для менеджеров. За два месяца вы наваяли 20 CRUD-контроллеров, 40 представлений и тонну JavaScript для валидации. А через полгода приходит новый заказчик и просит мультитенантность — всё с нуля. Разработка админ-панели на Laravel часто превращается в хаос: повторяющаяся CRUD-логика, раздутые контроллеры, ручное связывание форм и таблиц. Filament решает это, предоставляя декларативный API на основе ресурсов. Однако без правильной архитектуры панель становится неуправляемой — мы знаем это по опыту 40+ проектов. Используя Filament 3 с Livewire, мы строим панели, которые не тормозят даже при тысячах записей, и экономим до 60% времени по сравнению с кастомной разработкой. Filament ускоряет разработку в 3 раза — это подтверждает наша практика.
Какие проблемы решает Filament?
N+1 запросы при загрузке списков. Filament автоматически оптимизирует запросы через eager loading, но для сложных связей нужно правильно настроить with() в ресурсе. Иначе таблица грузится по 10 секунд. Мы точечно настраиваем relationship-колонки и избегаем этой боли. Кейс: для клиента с 50 000 заказов настроили eager loading на заказы и товары — время загрузки упало с 12 до 0.3 секунды.
Hydration mismatch при реактивных обновлениях. Livewire иногда выдаёт ошибки при несоответствии состояния на сервере и клиенте. Мы используем defer для форм и lazy для виджетов, чтобы минимизировать расхождения.
Гибкость кастомизации. Встроенные компоненты не всегда покрывают бизнес-логику. Filament позволяет создавать кастомные страницы на Blade или Livewire, подключать свои действия и хуки. Например, мы реализовали панель аналитики с графиками Chart.js за 2 дня — без единого JavaScript файла.
Как мы строим админ-панель на Filament
Стек: Laravel 11, Filament 3, Livewire 3, Alpine.js, PostgreSQL, Redis, Docker. Для мультитенантности используем встроенный механизм Filament, для прав — Spatie Permission. Пример типового ресурса Order:
php artisan make:filament-resource Order --generate Кастомизация формы и таблицы — в коде ресурса. Мы добавляем фильтры, bulk-действия и виджеты дашборда. Вот как выглядит виджет выручки:
class RevenueWidget extends StatsOverviewWidget { protected function getStats(): array { return [ Stat::make('Выручка сегодня', '₽' . number_format(Order::today()->sum('total') / 100, 0, '.', ' ')) ->description('+12% к прошлой неделе') ->descriptionIcon('heroicon-m-arrow-trending-up') ->color('success'), Stat::make('Новых заказов', Order::today()->count()), Stat::make('Средний чек', '₽' . number_format(Order::today()->avg('total') / 100, 0, '.', ' ')), ]; } } Для нестандартных страниц — например, аналитики — создаём кастомную Blade-страницу с Livewire-компонентами.
Сравнение: Filament vs кастомная панель
| Критерий | Filament | Кастомная (Laravel + Bootstrap) |
|---|---|---|
| Срок разработки (5 ресурсов) | 2–3 недели | 6–8 недель |
| Код (строк) | ~500 | ~3000 |
| Гибкость | Высокая (кастомные страницы, Livewire) | Средняя (ручное написание) |
| Поддержка мультитенантности | Встроенная | Реализация вручную |
| Производительность | Высокая (Livewire, lazy loading) | Зависит от реализации |
Сравнение с альтернативами: Filament vs Nova vs Orchid
| Параметр | Filament | Laravel Nova | Orchid |
|---|---|---|---|
| Лицензия | Бесплатно | Платно ($199/сайт) | Бесплатно |
| Архитектура | Livewire + Blade | Vue.js | Livewire + Blade |
| Кастомизация | Полная | Ограниченная через инструменты | Полная |
| Сообщество | Активное | Коммерческое | Среднее |
Филамент выигрывает по соотношению цена/возможности и не уступает в гибкости даже кастомным решениям.
Процесс работы
- Аналитика: изучаем бизнес-процессы, выделяем сущности и роли.
- Проектирование: создаём структуру ресурсов, формы, права доступа.
- Разработка: реализуем ресурсы, виджеты, кастомные страницы, интеграции.
- Тестирование: unit-тесты, нагрузочное тестирование, проверка Core Web Vitals.
- Деплой: Docker-контейнеры, CI/CD, настройка мониторинга.
Что входит в результат
- Полный код админ-панели с ресурсами, формами, таблицами, виджетами.
- Документация по структуре и настройке.
- Обучение команды (1–2 сессии).
- Гарантийная поддержка 1 месяц после сдачи.
Как избежать типичных ошибок при работе с Filament?
- Не настраивать eager loading в ресурсах — тормозит таблицы.
- Игнорировать
Policies— дырявая безопасность. - Использовать
$generateбез кастомизации — получаем шаблонную панель. - Забывать про lazy loading для виджетов — падает дашборд.
Подробнее о настройке eager loading
Например, для модели Order с отношением к User и Items, в ресурсе нужно указать `protected static ?string $model = Order::class;` и добавить в `getListTableColumns()` колонки с `relationship('user.name')`. Для загрузки связанных данных используйте `->with(['user', 'items.product'])` в `getEloquentQuery()`.Опираясь на наш опыт, мы избегаем этих граблей и строим панели, которые масштабируются с ростом бизнеса. Свяжитесь с нами, чтобы обсудить вашу задачу. Закажите разработку админ-панели на Filament — результат превзойдёт ожидания.







