Tutorial Laravel Filament #6 : Membuat CRUD Posts Dengan Resource


Tutorial Laravel Filament #6 : Membuat CRUD Posts Dengan Resource

Halo teman-teman semuanya, pada artikel sebelumnya kita telah berhasil membuat Model dan Migration untuk data posts dan pada kesempatan kali ini kita semua akan belajar bagaimana cara membuat CRUD data posts dengan Laravel Filement.

Langkah 1 - Membuat Resource Post

Silahkan teman-teman jalankan perintah berikut ini di dalam terminal/CMD dan pastikan berada di dalam project Laravel-nya.

php artisan make:filament-resource Post

Jika perintah di atas berhasil dijalankan, maka kita akan mendapatkan beberapa file, yang berada di dalam folder app/Filament/Resources.

.
+-- PostResource.php
+-- PostResource
|   +-- Pages
|   |   +-- CreatePost.php
|   |   +-- EditPost.php
|   |   +-- ListPosts.php

Sekarang, jika kita reload project-nya, maka kita sudah dibuatkan menu dibagian sidebar.

Langkah 2 - Mengubah Icon di Sidebar

Sekarang, kita akan ubah icon posts yang ada pada sidebar, silahkan teman-teman buka file app/Filament/Resources/PostResource.php, kemudian cari kode berikut ini.

app/Filament/Resources/PostResource.php

protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';

Dan ubahlah menjadi seperti berikut ini.

app/Filament/Resources/PostResource.php

protected static ?string $navigationIcon = 'heroicon-o-newspaper';

Sekarang, silahkan teman-teman reload project-nya, maka icon di sidebar akan berubah.

Langkah 3 - Mengubah Redirect URL

Silahkan teman-teman buka file app/Filament/Resources/PostResource/Pages/CreatePost.php, kemudian tambahkan method ini di dalamnya.

app/Filament/Resources/PostResource/Pages/CreatePost.php

protected function getRedirectUrl(): string
{
    return $this->getResource()::getUrl('index');
}

Kedua, kita akan menambahkan untuk halaman edit. Silahkan teman-teman buka file app/Filament/Resources/PostResource/Pages/EditPost.php, kemudian tambahkan method ini di dalamnya.

app/Filament/Resources/PostResource/Pages/EditPost.php

protected function getRedirectUrl(): string
{
    return $this->getResource()::getUrl('index');
}

Dari penambahan method di atas, kita atur agar saat setelah proses create dan edit akan diarahkan ke halaman index.

Langkah 4 - Membuat Form

Sekarang jika kita klik New post, maka kita hanya mendapatkan halaman blank, kurang lebih seperti berikut ini.

Disini kita untuk menambahkan beberapa input atau form di dalamnya. Silahkan teman-teman buka file app/Filament/Resources/PostResource.php, kemudian cari kode berikut ini.

app/Filament/Resources/PostResource.php

public static function form(Form $form): Form
{
    return $form
        ->schema([
            //
        ]);
}

Dan ubahlan menjadi seperti berikut ini.

app/Filament/Resources/PostResource.php

public static function form(Form $form): Form
{
    return $form
        ->schema([

            //card
            Forms\Components\Card::make()
                ->schema([
                
                		//image
                    Forms\Components\FileUpload::make('image')
                        ->label('Image')
                        ->required(),

                    //grid
                    Forms\Components\Grid::make(2)
                      ->schema([

                         //title
                          Forms\Components\TextInput::make('title')
                          ->label('Title')
                          ->placeholder('Title')
                          ->required(), 

                          //category
                          Forms\Components\Select::make('category_id')
                              ->label('Category')
                              ->relationship('category', 'name')
                              ->required(),
                      ]),

                    //content
                    Forms\Components\RichEditor::make('content')
                        ->label('Content')
                        ->placeholder('Content')
                        ->required(),
                    
                ])
        ]);
}

Dari perubahan kode di atas, pertama kita menambahkan component Card.

Forms\Components\Card::make()

Dan di dalamnya kita menambahkan FileUpload dengan nama image.

//image
Forms\Components\FileUpload::make('image')
  ->label('Image')
  ->required(),

Kemudian, kita menambahkan component grid dengan 2 column. Dimana di dalam grid tersebut kita menambahkan 2 component, yaitu:

  1. TextInput dengan nama title.

    //title
    Forms\Components\TextInput::make('title')
      ->label('Title')
      ->placeholder('Title')
      ->required(), 
    
  2. Select dengan nama category_id dan memanggil relasi category.

    //category
    Forms\Components\Select::make('category_id')
      ->label('Category')
      ->relationship('category', 'name')
      ->required(),
    

Selanjutnya, kita membuat component RichEditor dengan nama content.

//content
Forms\Components\RichEditor::make('content')
  ->label('Content')
  ->placeholder('Content')
  ->required(),

Sekarang, silahkan reload project-nya, jika berhasil maka akan mendapatkan hasil seperti berikut ini.

Sekarang, silahkan teman-teman masukkan data posts, jika berhasil maka hasilnya kurang lebih seperti berikut ini.

Di atas, kita sudah berhasil melakukan proses create data ke dalam database.

Langkah 5 - Menampilkan Data

Setelah proses create data berhasil, maka sekarang kita akan belajar menampilkannya, silahkan teman-teman buka file berikut ini app/Filament/Resources/PostResource.php, kemudian cari kode berikut ini.

app/Filament/Resources/PostResource.php

public static function table(Table $table): Table
{
    return $table
        ->columns([
            //
        ])
        ->filters([
            //
        ])
        ->actions([
            Tables\Actions\EditAction::make(),
        ])
        ->bulkActions([
            Tables\Actions\BulkActionGroup::make([
            Tables\Actions\DeleteBulkAction::make(),
        ]),
    ]);
}

Kemudian ubah menjadi seperti berikut ini.

app/Filament/Resources/PostResource.php

public static function table(Table $table): Table
{
    return $table
        ->columns([
            Tables\Columns\ImageColumn::make('image')->circular(),
            Tables\Columns\TextColumn::make('title')->searchable(),
            Tables\Columns\TextColumn::make('category.name'),
        ])
        ->filters([
            //
        ])
        ->actions([
            Tables\Actions\EditAction::make(),
        ])
        ->bulkActions([
            Tables\Actions\BulkActionGroup::make([
            Tables\Actions\DeleteBulkAction::make(),
        ]),
    ]);
}

Dari perubahan kode di atas, pada bagian columns kita menambahkan TextColumn dengan nama image, title dan category.

Tables\Columns\ImageColumn::make('image')->circular(),
Tables\Columns\TextColumn::make('title')->searchable(),
Tables\Columns\TextColumn::make('category.name'),

Kemudian pada bagian title kita tambahkan searchable untuk proses pencarian data berdasarkan title.

Sekarang, silahkan reload project-nya, jika berhasil maka kurang lebih hasilnya akan seperti berikut ini.

Di atas, gambar tidak berhasil ditampilkan, itu karena kita belum mengatur alamat project kita di dalam file .env.

Silahkan buka file .env, kemudian cari kode berikut ini.

.env

APP_URL=http://localhost

Dan ubahlah menjadi seperti berikut ini.

.env

APP_URL=http://localhost:8000

Sekarang, pasti gambar akan berhasil ditampilkan. Kurang lebih seperti berikut ini.

Kesimpulan

Pada artikel kali ini, kita telah berhasil membuat sebuah CRUD data posts dengan sangat cepat menggunakan fitur Resource yang disediakan oleh Laravel Filament.

Jika teman-teman ada kendala saat belajar atau mengikuti materi ini, silahkan bisa bertanya melalui kolom komentar atau melalui group Telegram milik SantriKoding.

Terima Kasih


Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CO-Founder SantriKoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami