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/hapusresources/views/articles/create.blade.php— form bikin artikel baruresources/views/articles/edit.blade.php— form edit artikelresources/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())
Judul
Dibuat
Aksi
@foreach ($articles as $article)
{{ $article->title }}
{{ $article->created_at->format('d M Y') }}
Edit
@endforeach
{{ $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):
- Siapkan hosting — pilih yang support PHP 8.2+ dan Composer
- Upload via FTP/Git — push code ke repository (GitHub), lalu clone di server. Atau upload langsung via FTP (folder
publicke public_html, sisanya di luar) - Setup .env — di server, copy
.env.examplejadi.env, aturDB_HOST,DB_NAME,DB_USER,DB_PASS, danAPP_KEY - Generate APP_KEY — jalankan
php artisan key:generate(atau set secara manual di .env) - Run migration — exec
php artisan migrate --forcedi server (flag--forcekarena production) - Set permissions — folder
storagedanbootstrap/cacheharus writable (chmod 775) - 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=falsedi .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! 🚀