Web Development May 05, 2026 · 5 min read · 2 dilihat

Laravel 13 Ep. 6: CRUD Lengkap & Deploy ke Hosting

Akhirnya sampai di episode terakhir series "Belajar Laravel 13 dari Nol"! Di part 6 ini, kita akan menyelesaikan fitur CRUD lengkap di aplikasi kamu — mulai dari membuat form input data, daftar data dengan pagination, edit, hapus, sampai testing lokal sebelum deploy. Jika di episode 5 kamu sudah setup authentication, sekarang waktunya menambahkan logika bisnis utama. Kami akan walk-through step-by-step cara membuat CRUD yang rapi, aman dari SQL injection & CSRF, dan siap dikirim ke hosting production. Di akhir, kamu akan punya project pertama yang benar-benar berfungsi dan live!

Laravel 13 Ep. 6: CRUD Lengkap & Deploy ke Hosting

Setelah setup authentication di episode 5, aplikasi kamu sudah punya fondasi solid. Sekarang saatnya menambahkan fitur CRUD yang membuat aplikasi benar-benar berguna — dan akhirnya deploy ke hosting agar bisa diakses dari mana saja.

Di episode final ini, kita akan membangun fitur CRUD lengkap untuk manage data, testing sebelum deploy, dan langkah-langkah praktis push ke hosting. Siapkan kopi kamu, karena setelah selesai artikel ini, aplikasi pertama kamu bakal live di internet!

1. Setup Model, Migration, dan Database

Langkah pertama adalah membuat tabel database dan model yang sesuai. Misalkan kita akan membuat aplikasi manage artikel blog — setiap user bisa membuat, edit, dan hapus artikel miliknya sendiri.

Jalankan command berikut di terminal project kamu:

php artisan make:model Article -m

Perintah -m membuat migration file secara otomatis. Buka file migration yang baru dibuat di folder database/migrations, lalu edit method up():

public function up(): void
{
    Schema::create('articles', function (Blueprint $table) {
        $table->id();
        $table->foreignId('user_id')->constrained()->onDelete('cascade');
        $table->string('title');
        $table->text('content');
        $table->string('slug')->unique();
        $table->timestamps();
    });
}

Perhatikan foreignId('user_id') — ini mengaitkan artikel dengan user. Ketika user dihapus, artikel mereka otomatis terhapus juga berkat onDelete('cascade'). Sekarang jalankan migration:

php artisan migrate

2. Bikin Resource Routes untuk CRUD

Laravel punya fitur handy bernama Resource Routes yang otomatis generate 7 endpoint standar CRUD. Buka file routes/web.php dan tambahkan:

use App\Http\Controllers\ArticleController;

Route::middleware('auth')->group(function () {
    Route::resource('articles', ArticleController::class);
});

Semua route artikel sekarang protected dengan middleware auth — hanya user login yang bisa akses. Untuk melihat semua route yang di-generate, jalankan:

php artisan route:list

Kamu akan lihat 7 route: index, create, store, show, edit, update, destroy. Sangat convenient!

3. Generate Controller & Lengkapi Logic CRUD

Generate controller dengan method-method CRUD otomatis:

php artisan make:controller ArticleController --model=Article --resource

Buka app/Http/Controllers/ArticleController.php dan lengkapi setiap method. Ini contoh method index() untuk list artikel dengan pagination:

public function index()
{
    $articles = auth()->user()->articles()->paginate(10);
    return view('articles.index', compact('articles'));
}

Untuk method store() (simpan data baru):

public function store(Request $request)
{
    $validated = $request->validate([
        'title' => 'required|min:5|max:255',
        'content' => 'required|min:20',
    ]);

    $validated['user_id'] = auth()->id();
    $validated['slug'] = Str::slug($validated['title']);

    Article::create($validated);

    return redirect()->route('articles.index')->with('success', 'Artikel berhasil dibuat!');
}

Perhatian: validate input kamu sebelum simpan — ini mencegah data trash dan XSS attack. Slug di-generate otomatis dari title untuk URL yang clean.

Untuk update() dan destroy(), pastikan user hanya bisa edit/hapus artikel milik mereka sendiri dengan policy authorization.

4. Bikin Policy & Authorize Update/Delete

Jangan biarkan user A bisa edit artikel user B! Generate policy:

php artisan make:policy ArticlePolicy --model=Article

Di file app/Policies/ArticlePolicy.php, tambahkan method:

public function update(User $user, Article $article): bool
{
    return $user->id === $article->user_id;
}

public function delete(User $user, Article $article): bool
{
    return $user->id === $article->user_id;
}

Kemudian di controller, gunakan authorize:

public function update(Request $request, Article $article)
{
    $this->authorize('update', $article);
    // lanjutkan update logic
}

5. Bikin Views untuk Form & List

Kamu butuh beberapa view file:

  • resources/views/articles/index.blade.php — list semua artikel dengan tombol edit/hapus
  • resources/views/articles/create.blade.php — form bikin artikel baru
  • resources/views/articles/edit.blade.php — form edit artikel
  • resources/views/articles/show.blade.php — tampil artikel lengkap

Contoh index.blade.php:

@extends('layouts.app')
@section('content')

Artikel Saya

Buat Artikel Baru
@if ($articles->count()) @foreach ($articles as $article) @endforeach
Judul Dibuat Aksi
{{ $article->title }} {{ $article->created_at->format('d M Y') }} Edit
@csrf @method('DELETE')
{{ $articles->links() }} @else

Belum ada artikel. Buat yang pertama

@endif
@endsection

Untuk form create/edit, gunakan @csrf untuk CSRF protection dan @method('PUT') untuk method spoofing — form HTML hanya support GET & POST, tapi kita bisa "spoof" ke PUT untuk update request.

6. Testing Lokal Sebelum Deploy

Sebelum push ke hosting, test CRUD kamu di lokal:

  • Jalankan php artisan serve
  • Login dengan akun test
  • Bikin artikel baru — check valid form & database
  • Edit artikel — pastikan hanya pemilik bisa edit
  • Coba akses edit artikel orang lain — harusnya 403 Forbidden
  • Hapus artikel — check apakah benar terhapus
  • Test pagination dengan bikin 15+ artikel

Jika semua berfungsi, lanjut ke deploy.

7. Deploy ke Hosting

Langkah-langkah umum deploy Laravel ke hosting shared (banyak provider lokal seperti Niagahoster, Rumahweb, dll mendukung Laravel):

  1. Siapkan hosting — pilih yang support PHP 8.2+ dan Composer
  2. Upload via FTP/Git — push code ke repository (GitHub), lalu clone di server. Atau upload langsung via FTP (folder public ke public_html, sisanya di luar)
  3. Setup .env — di server, copy .env.example jadi .env, atur DB_HOST, DB_NAME, DB_USER, DB_PASS, dan APP_KEY
  4. Generate APP_KEY — jalankan php artisan key:generate (atau set secara manual di .env)
  5. Run migration — exec php artisan migrate --force di server (flag --force karena production)
  6. Set permissions — folder storage dan bootstrap/cache harus writable (chmod 775)
  7. Optimize production — jalankan php artisan config:cache, route:cache, view:cache

Jika pakai VPS atau managed hosting seperti Laravel Forge, prosesnya lebih mudah — tinggal push ke git, sistem otomatis deploy.

Akses domain kamu — jika landing page muncul & login berfungsi, selamat! Aplikasi kamu sudah live.

8. Checklist Security Sebelum Production

Sebelum announce aplikasi kamu ke orang banyak:

  • Set APP_DEBUG=false di .env production — jangan expose error detail
  • Pastikan APP_ENV=production
  • Setup HTTPS/SSL — hampir semua hosting modern menyediakan Let's Encrypt gratis
  • Update semua dependency: composer update
  • Backup database secara berkala
  • Setup file upload validation ketat jika ada fitur upload
  • Monitor logs — storage/logs/laravel.log

Kesimpulan

Congratulations! Kamu sudah menyelesaikan series "Belajar Laravel 13 dari Nol". Dari auth setup sampai CRUD production-ready, project pertama kamu sekarang bisa handle real users dengan data persistent dan secure.

Langkah selanjutnya? Explore fitur-fitur Advanced Laravel seperti job queue untuk email background, file storage cloud (S3), caching advanced, dan API REST. Tapi sekarang, appreciasi dulu apa yang udah kamu capai — aplikasi web yang benar-benar fungsional dan live di internet. Keep coding! 🚀

Tags:

#Deploy #Laravel 13 #Web Development #CRUD Tutorial #Beginner

Share this article: