Розробка адміністративної панелі на Filament (Laravel)

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Розробка адміністративної панелі на Filament (Laravel)
Середня
від 1 тижня до 3 місяців
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Розробка административної панелі на Filament (Laravel)

Filament — сучасний фреймворк для побудови admin-панелей на Laravel. Використовує Livewire та Alpine.js для реактивних компонентів без написання JavaScript. У 2025 році — де-факто стандарт для Laravel-проектів, яким потрібна швидко написана, але гнучко настраюється панель.

Установка

composer require filament/filament:"^3.0"
php artisan filament:install --panels
php artisan make:filament-user

Створення ресурсу

php artisan make:filament-resource Order --generate

Створює OrderResource зі стандартними CRUD-операціями. Кастомізація:

class OrderResource extends Resource
{
    protected static ?string $model = Order::class;
    protected static ?string $navigationIcon = 'heroicon-o-shopping-cart';
    protected static ?string $navigationGroup = 'Продажи';

    public static function form(Form $form): Form
    {
        return $form->schema([
            Select::make('status')
                ->options(OrderStatus::class)
                ->required(),
            TextInput::make('total')
                ->numeric()->prefix('₽')->disabled(),
            Select::make('customer_id')
                ->relationship('customer', 'name')
                ->searchable()->preload(),
            Repeater::make('items')
                ->relationship()
                ->schema([
                    Select::make('product_id')->relationship('product', 'name')->searchable(),
                    TextInput::make('quantity')->numeric()->minValue(1),
                    TextInput::make('price')->numeric()->prefix('₽')
                ])
        ]);
    }

    public static function table(Table $table): Table
    {
        return $table
            ->columns([
                TextColumn::make('id')->sortable(),
                TextColumn::make('customer.name')->searchable(),
                BadgeColumn::make('status')
                    ->colors(['warning' => 'pending', 'success' => 'completed', 'danger' => 'cancelled']),
                TextColumn::make('total')->money('RUB')->sortable(),
                TextColumn::make('created_at')->dateTime()->sortable()
            ])
            ->filters([
                SelectFilter::make('status')->options(OrderStatus::class),
                Filter::make('created_at')
                    ->form([DatePicker::make('from'), DatePicker::make('until')])
                    ->query(fn($query, $data) =>
                        $query->when($data['from'], fn($q, $d) => $q->whereDate('created_at', '>=', $d))
                              ->when($data['until'], fn($q, $d) => $q->whereDate('created_at', '<=', $d))
                    )
            ])
            ->actions([
                Tables\Actions\EditAction::make(),
                Action::make('complete')
                    ->icon('heroicon-o-check')
                    ->color('success')
                    ->requiresConfirmation()
                    ->action(fn(Order $record) => $record->markAsCompleted())
                    ->visible(fn(Order $record) => $record->status === 'pending')
            ])
            ->bulkActions([
                BulkAction::make('export')
                    ->icon('heroicon-o-arrow-down-tray')
                    ->action(fn($records) => ExportOrders::run($records))
            ]);
    }
}

Вджети та дашборд

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, '.', ' ')),
        ];
    }
}

Кастомні сторінки

class AnalyticsPage extends Page
{
    protected static string $view = 'filament.pages.analytics';
    protected static ?string $navigationLabel = 'Аналітика';
    protected static ?string $navigationIcon = 'heroicon-o-chart-bar';

    public function getViewData(): array
    {
        return [
            'revenueByDay' => Order::revenueByDay(30),
            'topProducts'  => Product::topSelling(10)
        ];
    }
}

Права доступу через Policies

public static function canCreate(): bool
{
    return auth()->user()->can('create', static::getModel());
}

public static function canEdit(Model $record): bool
{
    return auth()->user()->can('update', $record);
}

Multi-tenancy

Filament 3 підтримує мультитенантність з концепцією Tenant:

class OrderResource extends Resource
{
    public static function getEloquentQuery(): Builder
    {
        return parent::getEloquentQuery()
            ->whereBelongsTo(Filament::getTenant());
    }
}

Срок розробки: 2–4 тижні для панелі з 5–10 ресурсами, кастомними вджетами та настроєними правами.