Когда в проекте на Laravel появляется задача «нужна админка», у разработчика обычно два пути: писать CRUD-контроллеры и Blade-шаблоны руками или взять готовый инструмент. Filament — это open-source UI-фреймворк для Laravel, который строит полноценные административные панели поверх Livewire и Tailwind CSS. В этой статье разберём актуальную версию Filament v5 на практике: установим панель, создадим первый ресурс с CRUD, настроим форму и таблицу, добавим виджет на дашборд. Цель — собрать рабочую админку буквально за час.
Что такое Filament и зачем он нужен
Filament — это набор пакетов, который превращает обычное Laravel-приложение в систему с админ-панелью без написания фронтенда вручную. Под капотом — Livewire для реактивности и Tailwind CSS для стилей, поэтому интерфейс получается отзывчивым «из коробки». Вы описываете на PHP, какие поля должны быть в форме и какие колонки в таблице, а Filament генерирует готовые страницы списка, создания и редактирования записей.
Актуальная стабильная версия на момент написания — Filament v5 (последний релиз ветки — 5.6.7). Сама мажорная версия v5 вышла в январе 2026 года и по сути является адаптацией v4 под Livewire v4: новых функциональных возможностей относительно v4 в ней нет, поэтому весь синтаксис ниже одинаково применим и к v4, и к v5. Если вы недавно читали наш разбор Livewire 4, то Filament v5 — это как раз тот слой, который работает поверх него.
Требования и установка
Перед установкой убедитесь, что окружение соответствует требованиям Filament v5:
- PHP 8.2 или новее;
- Laravel 11.28 или новее;
- Livewire 4.0+;
- Tailwind CSS 4.0+.
Устанавливаем основной пакет через Composer и запускаем инсталлятор панели:
composer require filament/filament:"^5.0"
php artisan filament:install --panels
Команда filament:install --panels создаёт панель по умолчанию и регистрирует провайдер app/Providers/Filament/AdminPanelProvider.php. Именно в этом провайдере описывается конфигурация панели: путь (по умолчанию /admin), цветовая схема, навигация, плагины и автообнаружение ресурсов.
Дальше нужен пользователь, под которым вы войдёте в панель. Filament умеет создавать его интерактивно:
php artisan make:filament-user
Команда спросит имя, email и пароль, после чего создаст запись в таблице users. Теперь можно открыть http://your-app.test/admin и увидеть страницу логина, а после входа — пустой дашборд. Базовая панель готова, переходим к содержимому.
Первый ресурс: CRUD за одну команду
Главная сущность Filament — ресурс (Resource). Это класс, который связывает Eloquent-модель с набором страниц администрирования: списком, формой создания и формой редактирования. Предположим, у нас уже есть модель Customer с миграцией. Сгенерируем для неё ресурс:
php artisan make:filament-resource Customer
Если хочется сэкономить время, можно попросить Filament автоматически собрать форму и таблицу на основе колонок таблицы в базе данных — для этого есть флаг --generate:
php artisan make:filament-resource Customer --generate
В Filament v5 сгенерированный ресурс раскладывается по нескольким файлам, что заметно отличается от старых версий, где всё лежало в одном классе:
CustomerResource.php— корневой класс ресурса;Pages/— страницыListCustomers.php,CreateCustomer.php,EditCustomer.php;Schemas/CustomerForm.php— описание формы;Tables/CustomersTable.php— описание таблицы.
Такое разделение упрощает поддержку: форма и таблица живут в отдельных файлах и не раздувают основной класс. Если же вам нужен компактный CRUD прямо в модальных окнах, без отдельных страниц создания и редактирования, используйте флаг --simple:
php artisan make:filament-resource Customer --simple
В этом случае у ресурса будет одна страница «Manage» со списком, а создание и редактирование откроются в модальных окнах — удобно для простых справочников.
Настройка формы
За форму отвечает метод form(). В Filament v4 и v5 он принимает объект Filament\Schemas\Schema (это важное изменение по сравнению с v3, где использовался Form). Внутри метода вы перечисляете компоненты — поля ввода, селекты, переключатели и так далее:
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\DatePicker;
use Filament\Schemas\Schema;
public static function form(Schema $schema): Schema
{
return $schema->components([
TextInput::make('name')
->label('Имя')
->required()
->maxLength(255),
TextInput::make('email')
->label('Email')
->email()
->required()
->unique(ignoreRecord: true),
Select::make('status')
->label('Статус')
->options([
'active' => 'Активен',
'inactive' => 'Неактивен',
])
->default('active'),
DatePicker::make('born_at')
->label('Дата рождения'),
]);
}
Обратите внимание на цепочку методов: валидация (required(), email(), unique()) описывается декларативно прямо на компоненте. Filament применит эти правила и на стороне сервера, и в реактивной валидации Livewire. Параметр ignoreRecord: true у unique() исключает текущую запись при редактировании, чтобы не ловить ложное срабатывание уникальности.
Настройка таблицы
Метод table() описывает страницу списка. Здесь задаются колонки, фильтры, действия над строками и массовые действия. Разберём типовой пример:
use Filament\Tables\Table;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\BadgeColumn;
use Filament\Tables\Filters\SelectFilter;
use Filament\Actions\EditAction;
use Filament\Actions\DeleteBulkAction;
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('name')
->label('Имя')
->searchable()
->sortable(),
TextColumn::make('email')
->label('Email')
->searchable()
->copyable(),
BadgeColumn::make('status')
->label('Статус')
->colors([
'success' => 'active',
'danger' => 'inactive',
]),
TextColumn::make('created_at')
->label('Создан')
->dateTime('d.m.Y H:i')
->sortable(),
])
->filters([
SelectFilter::make('status')
->options([
'active' => 'Активен',
'inactive' => 'Неактивен',
]),
])
->recordActions([
EditAction::make(),
])
->toolbarActions([
DeleteBulkAction::make(),
]);
}
Метод searchable() добавляет глобальный поиск по колонке, sortable() — сортировку по клику на заголовок, copyable() — кнопку копирования значения. Фильтр SelectFilter автоматически добавит выпадающий список над таблицей. В сумме это полноценный интерфейс администрирования, который раньше пришлось бы собирать руками не один день.
Виджеты и дашборд
Пустой дашборд можно наполнить виджетами — например, карточками со статистикой. Сгенерируем виджет типа «stats overview»:
php artisan make:filament-widget CustomerStats --stats-overview
В созданном классе описываем карточки в методе getStats():
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;
use App\Models\Customer;
class CustomerStats extends BaseWidget
{
protected function getStats(): array
{
return [
Stat::make('Всего клиентов', Customer::count()),
Stat::make('Активных', Customer::where('status', 'active')->count())
->description('Доля активных')
->color('success'),
];
}
}
Виджеты, объявленные в каталоге app/Filament/Widgets, Filament подхватывает автоматически и выводит на главной странице панели. Так за пару минут дашборд превращается из пустого экрана в сводку по ключевым метрикам.
Итоги
Filament v5 закрывает типовую задачу «нужна админка» практически без фронтенд-кода: вы описываете формы и таблицы декларативно на PHP, а фреймворк берёт на себя верстку, реактивность и валидацию. За время чтения этой статьи реально собрать рабочую панель: установить пакет, создать пользователя, сгенерировать ресурс с CRUD, настроить форму и таблицу, добавить виджет статистики на дашборд.
Поскольку v5 отличается от v4 только поддержкой Livewire v4, выбор версии для нового проекта сводится к тому, на какой версии Livewire вы работаете. Дальше стоит копнуть глубже: связи между ресурсами (relation managers), кастомные страницы, политики доступа и мультипанельность — всё это Filament поддерживает и масштабируется до серьёзных внутренних систем, а не только простых справочников.