Чому 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 — результат перевершить очікування.







