Fungsi Filament PHP Pada Projek Laravel dan Cara Menggunakannya

Dalam pengembangan website, dashboard dan CMS (Content Management System) adalah elemen penting yang memudahkan pemilik website untuk memelihara dan mengelola konten. Namun, membuat dashboard yang aman, cepat, dan mudah di-maintenance membutuhkan waktu dan usaha yang tidak sedikit. Di sinilah Filament PHP hadir sebagai solusi yang praktis dan efisien.

Pengenalan Filament PHP

Filament PHP adalah sebuah package yang dirancang khusus untuk Laravel, yang memungkinkan developer untuk membuat dashboard dan panel admin dengan cepat dan mudah. Dengan menggunakan Filament PHP, kita bisa membuat dashboard dalam waktu kurang dari 15 menit!

Perbedaan Pembuatan Fitur Dengan FilamentPHP dan Tidak

Menggunakan Filament PHP:

Installasi Filament PHP

composer require filament/filament

Membuat Resource

php artisan make:filament-resource Product

Menambahkan Fields ke Form dan Table

class ProductResource extends Resource
{
    public static function form(Form $form): Form
    {
        return $form
            ->schema([
                TextInput::make('name')->required(),
                Textarea::make('description')->required(),
                NumberInput::make('price')->required(),
            ]);
    }

    public static function table(Table $table): Table
    {
        return $table
            ->columns([
                TextColumn::make('name')->sortable()->searchable(),
                TextColumn::make('description'),
                NumberColumn::make('price')->sortable(),
            ]);
    }
}

Membuat Custom Action

$table->actions([
    Action::make('discount')
        ->label('Apply Discount')
        ->action(function (Product $record) {
            $record->update(['price' => $record->price * 0.9]);
        }),
]);

Hasil Akhir dengan Filament PHP:

Dengan langkah-langkah di atas, Anda dapat membuat CRUD operations untuk entitas "Product" dengan cepat dan mudah, termasuk custom action untuk memberikan diskon.

Membuat Fitur Tanpa Filament PHP

Menggunakan Form Request, Database, dan Try-Catch Transaction:

Membuat Migration untuk Tabel Products

php artisan make:migration create_products_table

Schema::create('products', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->text('description');
    $table->decimal('price', 8, 2);
    $table->timestamps();
});

Membuat Model Product

php artisan make:model Product

Membuat Controller

php artisan make:controller ProductController

Membuat Form Request

php artisan make:request StoreProductRequest

class StoreProductRequest extends FormRequest
{
    public function rules()
    {
        return [
            'name' => 'required|string|max:255',
            'description' => 'required|string',
            'price' => 'required|numeric|min:0',
        ];
    }
}

Membuat Method untuk Store Product di Controller

class ProductController extends Controller
{
    public function store(StoreProductRequest $request)
    {
        try {
            DB::beginTransaction();

            $product = new Product();
            $product->name = $request->name;
            $product->description = $request->description;
            $product->price = $request->price;
            $product->save();

            DB::commit();

            return redirect()->route('products.index')->with('success', 'Product created successfully!');
        } catch (\\\\Exception $e) {
            DB::rollBack();
            return redirect()->back()->withErrors('Error creating product: ' . $e->getMessage());
        }
    }
}

Menambahkan Route di web.php

Route::resource('products', ProductController::class);

Hasil Akhir Tanpa Filament PHP:

Dengan pendekatan ini, Anda membuat CRUD operations secara manual, termasuk validasi menggunakan Form Request dan pengelolaan transaksi database menggunakan try-catch untuk memastikan data konsisten.

Menggunakan Filament PHP sangat mempermudah dan mempercepat proses pembuatan dashboard dan CRUD operations dibandingkan dengan membuatnya secara manual. Dengan Filament PHP, Anda bisa fokus pada logika bisnis dan fitur tambahan tanpa harus khawatir dengan boilerplate code yang biasanya diperlukan dalam pengembangan aplikasi Laravel.

Filament PHP Cocok Untuk Membuat Dashboard Apa Saja?

Filament PHP sangat fleksibel dan bisa digunakan untuk membuat berbagai jenis dashboard, antara lain:

  • Dashboard E-commerce: Mengelola produk, pesanan, dan pelanggan.
  • Dashboard Blog: Mengelola postingan, kategori, dan komentar.
  • Dashboard Sistem Manajemen Sekolah: Mengelola siswa, guru, dan kelas.
  • Dashboard Aplikasi Keuangan: Mengelola transaksi, laporan keuangan, dan pengguna.
  • Dashboard Sistem Pemesanan: Mengelola reservasi, pelanggan, dan pembayaran.

10 Fitur Unggulan Filament PHP dengan Contoh Kodingan

CRUD Builder: Membuat Create, Read, Update, Delete (CRUD) dengan cepat.

class PostResource extends Resource
{
    public static function form(Form $form): Form
    {
        return $form
            ->schema([
                TextInput::make('title')
                    ->required()
                    ->maxLength(255),
                Textarea::make('content')
                    ->required(),
                Select::make('status')
                    ->options([
                        'draft' => 'Draft',
                        'published' => 'Published',
                    ])
                    ->default('draft'),
            ]);
    }

    public static function table(Table $table): Table
    {
        return $table
            ->columns([
                TextColumn::make('title')->sortable()->searchable(),
                TextColumn::make('status')->sortable(),
                DateColumn::make('created_at')->sortable(),
            ]);
    }
}

Custom Pages: Membuat halaman kustom dengan mudah.

class Dashboard extends Page
{
    protected static string $view = 'filament.pages.dashboard';
}

<!-- resources/views/filament/pages/dashboard.blade.php -->
<x-filament::page>
    <x-filament::widgets.stats-overview />
    <div class="mt-8">
        <h2 class="text-xl font-bold">Recent Posts</h2>
        <livewire:recent-posts />
    </div>
</x-filament::page>

Form Builder: Membuat form yang kompleks dengan berbagai macam input.

$form->schema([
    TextInput::make('title')->required(),
    Textarea::make('description')->rows(3),
    FileUpload::make('photo')->disk('public')->directory('photos'),
    DatePicker::make('published_at')->label('Publish Date'),
    Toggle::make('is_active')->label('Active'),
]);

Table Builder: Menampilkan data dalam tabel dengan fitur sortable dan searchable.

$table->columns([
    TextColumn::make('name')->sortable()->searchable(),
    TextColumn::make('email')->searchable(),
    BooleanColumn::make('is_active')->label('Active')->sortable(),
    DateColumn::make('created_at')->label('Created')->sortable(),
]);

Widgets: Menambahkan widget seperti grafik dan statistik ke dalam dashboard.

class StatsOverview extends Widget
{
    protected function getCards(): array
    {
        return [
            Card::make('Total Users', User::count()),
            Card::make('Posts Published', Post::where('status', 'published')->count()),
            Card::make('Comments', Comment::count()),
        ];
    }
}

User Management: Mengelola pengguna dan peran (roles) dengan mudah.

class UserResource extends Resource
{
    public static function form(Form $form): Form
    {
        return $form
            ->schema([
                TextInput::make('name')->required(),
                TextInput::make('email')->email()->required(),
                PasswordInput::make('password')->required()->minLength(8),
                Select::make('role')
                    ->options([
                        'admin' => 'Admin',
                        'editor' => 'Editor',
                        'user' => 'User',
                    ])
                    ->default('user')
                    ->required(),
            ]);
    }
}

Custom Actions: Menambahkan aksi kustom pada tabel dan form.

$table->actions([
    Action::make('approve')
        ->label('Approve')
        ->action(function (Post $record) {
            $record->update(['status' => 'published']);
        }),
    Action::make('feature')
        ->label('Feature')
        ->action(function (Post $record) {
            $record->update(['is_featured' => true]);
        }),
]);

Resource Relationships: Mengelola hubungan antar model dengan mudah.

public static function form(Form $form): Form
{
    return $form
        ->schema([
            BelongsToSelect::make('user_id')
                ->relationship('user', 'name')->required(),
            BelongsToSelect::make('category_id')
                ->relationship('category', 'name')->required(),
        ]);
}

public static function table(Table $table): Table
{
    return $table
        ->columns([
            TextColumn::make('user.name')->label('User'),
            TextColumn::make('category.name')->label('Category'),
        ]);
}

File Uploads: Mendukung unggah file dengan berbagai format.

FileUpload::make('attachment')
    ->disk('public')
    ->directory('attachments')
    ->acceptedFileTypes(['application/pdf', 'image/*'])
    ->maxSize(1024),

Localization: Mendukung berbagai bahasa untuk aplikasi multi-bahasa.

'locales' => [
    'en' => 'English',
    'id' => 'Bahasa Indonesia',
    'fr' => 'French',
],

Tata Cara Menggunakan Filament PHP dalam Membuat Dashboard

Berikut ini adalah langkah-langkah menggunakan Filament PHP untuk membuat dashboard pada proyek website jualan motor dan mobil.

Instalasi Filament PHP

Pertama, kita perlu menginstal package Filament PHP melalui Composer.

composer require filament/filament

Membuat Resource untuk Motor dan Mobil

Buat resource untuk entitas motor dan mobil.

php artisan make:filament-resource Motor
php artisan make:filament-resource Mobil

Menambahkan Fields ke Form dan Table

Tambahkan fields yang dibutuhkan ke form dan table pada resource yang telah dibuat.

class MotorResource extends Resource
{
    public static function form(Form $form): Form
    {
        return $form
            ->schema([
                TextInput::make('nama')->required(),
                TextInput::make('merek')->required(),
                NumberInput::make('harga')->required(),
                FileUpload::make('gambar')->disk('public')->directory('motors'),
            ]);
    }

    public static function table(Table $table): Table
    {
        return $table
            ->columns([
                TextColumn::make('nama')->sortable()->searchable(),
                TextColumn::make('merek')->sortable(),
                NumberColumn::make('harga')->sortable(),
                ImageColumn::make('gambar')->disk('public'),
            ]);
    }
}

Membuat Custom Page untuk Laporan Penjualan

Buat halaman kustom untuk menampilkan laporan penjualan.

php artisan make:filament-page LaporanPenjualan

Tambahkan logika untuk menampilkan laporan penjualan pada halaman tersebut.

class LaporanPenjualan extends Page
{
    protected static string $view = 'filament.pages.laporan-penjualan';

    public function render()
    {
        return view('filament.pages.laporan-penjualan', [
            'laporan' => Penjualan::all(),
        ]);
    }
}

Menambahkan Widgets ke Dashboard

Tambahkan widget untuk menampilkan statistik penjualan.

class PenjualanStats extends Widget
{
    protected function getCards(): array
    {
        return [
            Card::make('Total Motor Terjual', Motor::count()),
            Card::make('Total Mobil Terjual', Mobil::count()),
        ];
    }
}

Mengatur Hak Akses dan Peran

Konfigurasi hak akses dan peran untuk pengguna yang akan mengelola dashboard.

class UserPolicy
{
    public function viewAny(User $user)
    {
        return $user->hasRole('admin');
    }
}

Kesimpulan

Sebagai seorang programmer, penting untuk terus mengeksplorasi berbagai tools baru agar pekerjaan bisa lebih cepat dan efisien. Filament PHP adalah salah satu contoh tools yang dapat mempercepat pembuatan dashboard dan CRUD operations di Laravel.

Selain itu, untuk memperdalam pengetahuan Laravel, Anda bisa mempelajari beberapa materi kelas terbaru dari BuildWithAngga yang dibuat oleh mentor expert. Benefit yang bisa Anda dapatkan antara lain:

  • Akses seumur hidup ke materi kelas.
  • Portofolio untuk meningkatkan peluang bekerja.
  • Support dan update materi secara berkala.
  • Komunitas belajar yang aktif.

Dengan memanfaatkan tools seperti Filament PHP dan mengikuti kelas dari BuildWithAngga, Anda dapat meningkatkan produktivitas dan kualitas kerja sebagai developer Laravel.