Filament v5: админ-панель для Laravel за час — установка, ресурсы и формы на практике — PROG-TIME

Filament v5: админ-панель для Laravel за час — установка, ресурсы и формы на практике

18.06.2026

Когда в проекте на 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 поддерживает и масштабируется до серьёзных внутренних систем, а не только простых справочников.