Tutorial Laravel Lengkap dari Dasar sampai Mahir: Panduan Laravel untuk Pemula

| | Laravel
Tutorial Laravel Lengkap dari Dasar sampai Mahir: Panduan Laravel untuk Pemula

tutorial laravel lengkap dari dasar sampai mahir. panduan paling lengkap untuk mempelajari framework PHP paling populer di Indonesia, mulai dari instalasi sampai deployment. update 2026 sudah mencakup Laravel 12 dan Laravel 13.

sebelum laravel, saya sempat berkutat lama dengan PHP murni dan sering nulis ulang kode yang sama untuk tiap project, sampai akhirnya pindah ke laravel dan baru sadar betapa banyak waktu yang terbuang. panduan ini saya tulis dari sudut pandang yang saya alami sendiri: apa yang dulu bikin saya bingung pas pertama belajar laravel, dan cara paling cepat melewatinya.

Apa itu Laravel?

laravel adalah framework PHP yang dirancang untuk pengembangan web modern. laravel nyediain struktur, fitur, dan alat yang dibutuhkan buat membangun aplikasi web yang andal dan skalabel.

laravel adalah framework PHP terpopuler di Indonesia dengan lebih dari 70.000 bintang di GitHub. framework ini pakai pola MVC (Model-View-Controller) dan nyediain fitur modern kayak routing, middleware, ORM (Eloquent), dan testing.


Daftar Isi Tutorial Laravel Lengkap

1. Pendahuluan & Instalasi

2. Arsitektur Laravel

3. Routing

4. Controller

5. Model & Eloquent ORM

6. Migration & Database

7. View & Blade Template

8. Middleware

9. Request & Validation

10. REST API

11. Testing

12. Queue & Job

13. Deployment

14. Livewire & Modern Features

15. Troubleshooting


1. Pendahuluan & Instalasi

laravel adalah framework PHP yang mengikuti pola MVC (Model-View-Controller). tujuannya bikin pengembangan web jadi menyenangkan, elegan, dan produktif. framework ini nyediain berbagai fitur built-in:

  1. Eloquent ORM: implementasi Active Record untuk database
  2. Routing: sistem routing yang fleksibel
  3. Middleware: filter HTTP request
  4. Migration: version control untuk skema database
  5. Blade Template: template engine yang sederhana
  6. Testing: testing suite bawaan
  7. Queue: pemrosesan job yang andal
  8. Event Broadcasting: fitur real-time

Cara Install Laravel Terbaru di Windows

berikut langkah instalasi laravel di windows yang biasa saya pakai, sudah saya sesuaikan untuk Laravel 12 dan 13:

  1. Cek versi PHP dulu php -v, kalau masih di bawah 8.2 upgrade dulu. Laravel 12 butuh PHP 8.2 atau lebih, Laravel 13 butuh PHP 8.3 ke atas (8.3 sampai 8.5). di 2026, PHP 8.3 itu yang paling aman buat production.
  2. Install Composer: download dari getcomposer.org
  3. Install Laravel Installer (opsional)
    composer global require laravel/installer
    
  4. Buat project baru
    laravel new nama-project
    # atau pakai composer dengan versi spesifik
    composer create-project laravel/laravel nama-project
    # untuk Laravel 13 eksplisit
    composer create-project laravel/laravel:^13.0 nama-project
    

kalau proses composer create-project gagal di tengah jalan, hal yang sering saya alami, biasanya penyebabnya koneksi atau versi PHP yang kurang baru. solusinya: pastikan versi PHP sesuai (8.2 untuk Laravel 12, 8.3 untuk Laravel 13), lalu jalankan ulang perintah di atas, tidak perlu mengulang dari langkah 1.

untuk panduan lengkap langkah per langkah, baca cara install laravel terbaru di windows.

Laravel di XAMPP, WAMP, Laragon

laravel bisa dijalankan di:

  • XAMPP: install composer di XAMPP
  • Laragon: sudah termasuk composer, paling praktis buat windows
  • Laravel Valet: untuk macOS

kalau kalian baru mulai, saya saranin laragon, instalasinya tinggal next-next beres, composer langsung kebawa.


2. Arsitektur Laravel

Pola MVC di Laravel

MVC (Model-View-Controller) itu pola arsitektur yang membagi aplikasi jadi tiga bagian:

  • Model: urusan data dan logika bisnis
  • View: urusan tampilan (UI)
  • Controller: penghubung model dan view, ngolah request

alurnya gini: user request masuk ke route, route ngarahin ke controller, controller ngambil data dari model, lalu ngirim data ke view buat ditampilin.

Struktur Direktori Laravel

# Struktur Laravel 10 dan sebelumnya (masih banyak ditemui di tutorial lama)
app/
├── Http/
│   ├── Controllers/     # Controller
│   └── Middleware/      # Middleware
├── Models/              # Model (Eloquent)
├── Providers/           # Service Provider
bootstrap/
├── app.php              # Application bootstrap (file, bukan folder)
config/                  # Konfigurasi aplikasi
database/
├── migrations/          # Database migrations
├── seeders/             # Database seeders
└── factories/           # Model factories
public/                  # Web root
resources/
├── views/               # Blade templates
├── js/                  # JavaScript
└── css/                 # Stylesheet
routes/
├── web.php              # Web routes
├── api.php              # API routes (sejak Laravel 11 tidak dibuat otomatis)
└── console.php          # Console commands

jangan hafalin semua folder ini sekarang. yang paling sering kalian sentuh tiap hari cuma empat: routes/, app/Http/Controllers/, app/Models/, dan resources/views/. sisanya bakal kebawa sendiri seiring project jalan.

catatan untuk Laravel 11 dan 12: strukturnya lebih ramping. app/Http/Kernel.php dan app/Console/Kernel.php sudah tidak ada, semua middleware dan routing diatur di bootstrap/app.php dengan sintaks Application::configure()->withMiddleware()->withRouting(). folder config/ dan app/Providers juga tidak dipublish otomatis, cuma muncul kalau kalian butuh. jadi kalau kalian baru laravel new di 2026 dan kok tidak nemu Kernel.php, itu normal, bukan error. routes/api.php juga tidak ada secara default, jalankan php artisan install:api biar muncul.


3. Routing

Route Dasar

// routes/web.php
Route::get('/', function () {
    return view('welcome');
});

Route::get('/hello', function () {
    return 'Hello, World!';
});

route itu “alamat” aplikasi kalian. tiap baris Route::get artinya, kalau ada request GET ke URL tertentu, jalankan fungsi yang diberikan.

Route Parameter

// Parameter wajib
Route::get('/user/{id}', function ($id) {
    return "User ID: $id";
});

// Parameter opsional
Route::get('/user/{id?}', function ($id = null) {
    return "User ID: " . ($id ?? 'guest');
});

parameter ditulis dalam kurung kurawal, dan otomatis dikirim ke fungsi sebagai argumen. tambah tanda tanya ({id?}) buat bikin parameter opsional.

Named Route

// Definisikan named route
Route::get('/user/profile', function () {
    return 'User Profile';
})->name('profile');

// Gunakan named route
$url = route('profile');

named route itu ngasih nama ke route, biar kalau URL-nya berubah, semua link tidak perlu diubah satu-satu, cukup pakai nama route-nya.


4. Controller

Membuat Controller

# Buat controller
php artisan make:controller UserController
// app/Http/Controllers/UserController.php
<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index()
    {
        $users = User::all();
        return view('users.index', compact('users'));
    }
    
    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users',
        ]);
        
        User::create($validated);
        return redirect()->route('users.index');
    }
}

controller itu tempat logika aplikasi tinggal. kebiasaan jelek yang harus dihindari: nulis logika langsung di route. route cukup ngarahin, logikanya di controller.

Resource Controller

# Buat resource controller
php artisan make:controller PhotoController --resource
// routes/web.php
Route::resource('photos', PhotoController::class);

perintah ini langsung ngegenerate tujuh method standar: index, create, store, show, edit, update, destroy. Route::resource otomatis mendaftarkan semua route-nya sekaligus.

untuk contoh nyata CRUD lengkap, baca tutorial laravel membuat REST API CRUD dengan JWT.


5. Model & Eloquent ORM

Apa itu Eloquent?

eloquent adalah implementasi Active Record yang disediakan laravel buat interaksi dengan database. dengan eloquent, tiap baris di tabel diwakili satu object model, dan operasi CRUD jadi jauh lebih singkat dibanding nulis query SQL manual.

Membuat Model

php artisan make:model User
// app/Models/User.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $fillable = ['name', 'email', 'password'];
    
    // Relasi
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

$fillable itu daftar kolom yang boleh diisi massal lewat User::create(). ini pengaman penting biar user tidak bisa nyuntik kolom yang tidak seharusnya, kayak is_admin.

Operasi CRUD dengan Eloquent

// Create
$user = User::create(['name' => 'John', 'email' => '[email protected]']);

// Read
$user = User::find(1);
$users = User::where('active', true)->get();

// Update
$user->update(['name' => 'Jane']);

// Delete
$user->delete();

CRUD dengan eloquent cuma empat baris konsep, jauh lebih enak daripada mysqli_query manual.


6. Migration & Database

Apa itu Migration?

migration itu version control untuk skema database. dengan migration, perubahan struktur tabel ditulis dalam kode, jadi bisa di-share ke tim dan di-rollback kalau salah. tanpa migration, tiap developer harus sinkron struktur database manual, itu sumber masalah klasik.

Membuat Migration

# Buat migration
php artisan make:migration create_users_table
// database/migrations/2024_01_01_000000_create_users_table.php
public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}

method up() jalan saat migrate, berisi definisi tabel. kalau mau rollback, tambah method down() yang isinya Schema::drop('users').

Menjalankan Migration

# Jalankan migration
php artisan migrate

# Rollback migration
php artisan migrate:rollback

migrate:rollback ngebatalin batch migration terakhir, bukan semua migration. buat balikin semuanya, pakai migrate:reset.

untuk panduan lengkapnya, baca cara migrate database laravel.


7. View & Blade Template

Apa itu Blade?

blade adalah template engine bawaan laravel. blade nyediain sintaks sederhana buat nampilin data, conditional, dan loop, tanpa ninggalin kenyamanan PHP.

Direktif Blade

{{-- Komentar --}}

{{-- Variable --}}
{{ $name }}

{{-- Conditional --}}
@if ($age >= 18)
    <p>Dewasa</p>
@elseif ($age >= 13)
    <p>Remaja</p>
@else
    <p>Anak-anak</p>
@endif

{{-- Loop --}}
@foreach ($users as $user)
    <p>{{ $user->name }}</p>
@endforeach

{{-- @forelse --}}
@forelse ($users as $user)
    <p>{{ $user->name }}</p>
@empty
    <p>Tidak ada pengguna</p>
@endforelse

{{ }} itu pengganti echo yang otomatis nge-escape HTML, aman dari XSS. @forelse itu @foreach plus blok @empty kalau datanya kosong, sering kepake buat nampilin pesan “tidak ada data”.

Template Inheritance

{{-- layouts/app.blade.php --}}
<html>
<head>
    <title>@yield('title')</title>
</head>
<body>
    @include('partials.navbar')
    
    <div class="content">
        @yield('content')
    </div>
    
    @include('partials.footer')
</body>
</html>

{{-- pages/home.blade.php --}}
@extends('layouts.app')

@section('title', 'Home')

@section('content')
    <h1>Selamat datang!</h1>
@endsection

@extends ngewariisi layout, @section ngisi bagian yang didefinisikan @yield di layout. navbar dan footer cukup ditulis sekali, semua halaman otomatis kebawa.


8. Middleware

Apa itu Middleware?

middleware itu filter HTTP yang ngecek dan ngolah request sebelum sampai ke controller. posisinya di tengah, persis kayak satpam di depan gedung: dia bisa ngizinin request lanjut, atau nolak dan redirect duluan.

Membuat Middleware

php artisan make:middleware CheckAge
// app/Http/Middleware/CheckAge.php
public function handle($request, Closure $next)
{
    if ($request->age < 18) {
        return redirect('home');
    }
    
    return $next($request);
}

$next($request) artinya “loloskan request ke lapisan berikutnya”. kalau tidak dipanggil, request berhenti di middleware.

Register Middleware

untuk Laravel 10 dan sebelumnya, daftarnya di app/Http/Kernel.php:

// app/Http/Kernel.php (Laravel 10 ke bawah)
protected $routeMiddleware = [
    'check.age' => \App\Http\Middleware\CheckAge::class,
];

// Gunakan di route
Route::get('/dashboard', function () {
    // ...
})->middleware('check.age');

untuk Laravel 11 dan 12, Kernel sudah tidak ada. daftarnya di bootstrap/app.php:

// bootstrap/app.php (Laravel 11/12)
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(web: __DIR__.'/../routes/web.php')
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->alias([
            'check.age' => \App\Http\Middleware\CheckAge::class,
        ]);
    })
    ->create();

middleware harus didaftarkan dulu sebelum bisa dipakai. contoh paling umum: middleware auth buat ngeproteksi halaman yang butuh login. kalau kalian pakai Laravel 12, jangan cari Kernel.php lagi, langsung edit bootstrap/app.php.


9. Request & Validation

Form Request

buat form request sendiri lebih rapi daripada nulis validasi di dalam controller, apalagi kalau formnya sudah banyak field-nya. cara buatnya:

php artisan make:request StoreUserRequest

nanti muncul file baru di app/Http/Requests/StoreUserRequest.php, isi bagian rules() dengan aturan validasinya:

// app/Http/Requests/StoreUserRequest.php
public function rules()
{
    return [
        'name' => 'required|string|max:255',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:8|confirmed',
    ];
}

untuk memakainya di controller, tinggal jadikan type-hint di method:

public function store(StoreUserRequest $request)
{
    // validasi sudah otomatis jalan sebelum masuk sini
    User::create($request->validated());
}

kalau ada field yang tidak lolos validasi, laravel otomatis ngembaliin error ke halaman sebelumnya, lengkap dengan pesannya. jadi tidak perlu nulis ulang logika cek satu-satu 🙂

Custom Validation

untuk aturan yang tidak ada di bawaan laravel, kita bisa pakai validasi manual di controller atau bikin aturan custom sendiri:

$request->validate([
    'username' => 'required|alpha_num|min:3|max:25|unique:users',
    'email' => 'required|email|unique:users,email',
]);

atau pakai aturan custom lewat perintah:

php artisan make:rule Uppercase

di Laravel 10 ke bawah pakai method passes:

// app/Rules/Uppercase.php (Laravel 10)
public function passes($attribute, $value)
{
    return strtoupper($value) === $value;
}

public function message()
{
    return 'Kolom :attribute harus huruf besar semua.';
}

di Laravel 11 dan 12 pakai interface ValidationRule yang baru:

// app/Rules/Uppercase.php (Laravel 11/12)
use Illuminate\Contracts\Validation\ValidationRule;

class Uppercase implements ValidationRule
{
    public function validate(string $attribute, mixed $value, Closure $fail): void
    {
        if (strtoupper($value) !== $value) {
            $fail('Kolom :attribute harus huruf besar semua.');
        }
    }
}

File Upload

untuk upload file, aturannya cukup tambahkan file atau mimes di validasi, lalu simpan file-nya dengan method store:

$request->validate([
    'avatar' => 'required|image|mimes:jpg,png|max:2048',
]);

$path = $request->file('avatar')->store('avatars', 'public');

file tersimpan di storage/app/public, jangan lupa jalankan php artisan storage:link biar bisa diakses lewat browser. masalah link storage ini saya bahas di php artisan storage link.


10. REST API

Membuat REST API

untuk membuat API, route-nya tidak di web.php melainkan di routes/api.php, dan URL-nya otomatis diberi prefix /api. di Laravel 11 dan 12 file api.php tidak dibuat otomatis, jalankan dulu:

php artisan install:api

baru isinya:

// routes/api.php
Route::apiResource('users', UserController::class);

atau kalau mau ditulis manual satu per satu:

Route::get('/users', [UserController::class, 'index']);
Route::post('/users', [UserController::class, 'store']);
Route::get('/users/{id}', [UserController::class, 'show']);
Route::put('/users/{id}', [UserController::class, 'update']);
Route::delete('/users/{id}', [UserController::class, 'destroy']);

buat cek hasilnya, kalian bisa tes pakai Postman atau langsung lewat browser untuk method GET.

API Resource

API Resource berfungsi buat ngebentuk format response API biar konsisten. misalnya kita tidak mau kolom password ikut terkirim ke client:

php artisan make:resource UserResource
// app/Http/Resources/UserResource.php
public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'email' => $this->email,
        'created_at' => $this->created_at->toDateString(),
    ];
}

di controller tinggal:

public function show(User $user)
{
    return new UserResource($user);
}

API Authentication (JWT vs Sanctum)

untuk API yang butuh login, cara yang umum dipakai adalah token. Laravel bawaan pakai Sanctum untuk SPA dan token sederhana, sedangkan JWT (JSON Web Token) butuh package tambahan seperti tymon/jwt-auth. polanya sama: saat user login, server mengeluarkan token, lalu token itu dikirim di header Authorization: Bearer <token> pada request berikutnya. route yang butuh login tinggal dibungkus middleware auth:sanctum (untuk Sanctum) atau auth:api (kalau sudah setup JWT).

jangan bingung, untuk pemula saya sarankan mulai dari Sanctum dulu, lebih simpel dan sudah included. JWT baru dipakai kalau memang butuh stateless token yang terpisah dari session.

untuk tutorial lengkap:


11. Testing

Unit Testing

testing itu cara buat memastikan fitur yang sudah kita buat tidak rusak saat ada perubahan. di laravel, kita bisa bikin test dengan perintah:

php artisan make:test UserTest

contoh test untuk cek proses login:

// tests/Feature/UserTest.php
public function test_user_can_login()
{
    $response = $this->post('/login', [
        'email' => '[email protected]',
        'password' => 'password',
    ]);
    
    $response->assertRedirect('/dashboard');
}

untuk menjalankannya:

php artisan test

Feature Testing

feature test nguji alur yang lebih panjang, misalnya user login lalu membuat artikel dan muncul di halaman utama.

public function test_user_can_create_post()
{
    $user = User::factory()->create();
    
    $this->actingAs($user)->post('/posts', [
        'title' => 'Judul Artikel',
        'body' => 'Isi artikelnya di sini',
    ]);
    
    $this->assertDatabaseHas('posts', ['title' => 'Judul Artikel']);
}

HTTP Testing

untuk API, kita bisa tes langsung response-nya dengan method kayak getJson atau postJson:

public function test_api_returns_users()
{
    $response = $this->getJson('/api/users');
    $response->assertStatus(200)
             ->assertJsonStructure([['id', 'name', 'email']]);
}

saya akui, dulu saya males banget nulis test, sampai akhirnya ada fitur yang rusak diam-diam dan baru ketahuan di production. sejak itu saya biasakan nulis test minimal untuk alur login dan CRUD 🙂


12. Queue & Job

Apa itu Queue?

queue itu antrean tugas yang dijalankan di background. tugas berat kayak kirim email massal, proses gambar, atau export data, tidak perlu bikin user nunggu. tugasnya dimasukin ke antrean, dan worker yang ngejalaninnya belakangan.

Membuat Job

php artisan make:job SendEmail
// app/Jobs/SendEmail.php
public function handle()
{
    Mail::to($this->user->email)->send(new WelcomeEmail($this->user));
}

untuk memasukkan tugas ke antrean, panggil dispatch:

SendEmail::dispatch($user);

Menjalankan Worker

agar queue berjalan, kita butuh worker yang memproses antrean:

php artisan queue:work

Scheduler

kalau ada tugas yang harus jalan otomatis tiap jam atau tiap hari, misalnya laporan harian atau hapus data sementara, tempat daftarnya beda tergantung versi:

untuk Laravel 10 ke bawah, di app/Console/Kernel.php:

// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    $schedule->job(new SendLaporanHarian)->dailyAt('07:00');
    $schedule->command('cleanup:temp')->weekly();
}

untuk Laravel 11 dan 12, di routes/console.php:

// routes/console.php (Laravel 11/12)
use Illuminate\Support\Facades\Schedule;

Schedule::job(new SendLaporanHarian)->dailyAt('07:00');
Schedule::command('cleanup:temp')->weekly();

untuk menjalankannya, pasang cron di server:

* * * * * cd /path-ke-project && php artisan schedule:run >> /dev/null 2>&1

cron ini wajib jalan tiap menit, nanti laravel sendiri yang mutusin tugas mana yang sudah waktunya dieksekusi. di Laravel 11/12 jangan cari Kernel.php lagi, langsung edit routes/console.php.


13. Deployment

Cara Deploy Laravel di Vercel

deploy laravel di vercel bisa untuk project yang ringan dan cepat, tapi perlu penyesuaian karena vercel bukan server PHP biasa. butuh vercel.json untuk menunjuk ke public/index.php sebagai entry point, dan file api/index.php sebagai bridge-nya.

bagi kalian yang baru mulai, saya sarankan deploy ke shared hosting atau VPS dulu karena paling mudah dan ramah kantong untuk Laravel. prosesnya biasanya: upload folder project ke public_html, pastikan root menunjuk ke folder public, lalu atur permission dan .env-nya. sudah banyak yang saya bantu lewat artikel deploy di bawah, dan pola errornya hampir selalu sama: permission atau cache.

tips 2026: kalau pakai Laravel 12 atau 13 di shared hosting, pastikan hosting sudah support PHP 8.2 atau 8.3, cek di cPanel MultiPHP Manager. banyak kasus error 500 cuma karena versi PHP belum diganti.

Deploy ke Server

sebelum upload ke server, jalankan perintah build berikut biar aplikasi berjalan optimal di production:

php artisan config:cache
php artisan route:cache
php artisan view:cache

Environment Configuration

jangan pernah menaruh kredensial di source code. simpan di file .env, dan pastikan file .env tidak ikut ter-upload ke git (sudah ada di .gitignore bawaan laravel).

APP_ENV=production
APP_DEBUG=false
DB_HOST=localhost
DB_DATABASE=nama_database
DB_USERNAME=root
DB_PASSWORD=rahasia

APP_DEBUG=false penting karena kalau true, error detail ikut tampil ke pengunjung, itu celah keamanan.

Optimization

setelah berjalan di production, beberapa perintah ini bisa bikin aplikasi lebih kencang:

# Cache config, route, dan view
php artisan optimize

# Bersihkan cache kalau ada perubahan
php artisan optimize:clear

14. Livewire & Modern Features

Livewire untuk Pemula

livewire adalah library full-stack yang memungkinkan kita membuat komponen interaktif tanpa nulis JavaScript sama sekali. cocok banget buat kalian yang masih nyaman dengan PHP murni tapi pengen halaman lebih responsif.

composer require livewire/livewire

contoh komponen counter paling sederhana:

{{-- resources/views/livewire/counter.blade.php --}}
<div>
    <button wire:click="increment">+</button>
    <span>{{ $count }}</span>
</div>
// app/Livewire/Counter.php (Livewire 3, namespace App\Livewire)
namespace App\Livewire;

use Livewire\Component;

class Counter extends Component
{
    public $count = 0;

    public function increment()
    {
        $this->count++;
    }
}

Inertia.js

kalau kalian pengen SPA (Single Page Application) modern, inertia.js adalah pilihan yang menarik. beda dengan membangun API lalu frontend terpisah, inertia tetap memakai route dan controller laravel, tapi halamannya di-render oleh vue atau react di sisi client. rasanya kayak aplikasi SPA, tapi tanpa harus membuat API sendiri.

composer require inertiajs/inertia-laravel
npm install @inertiajs/vue3

Laravel Jetstream

jetstream adalah starter kit resmi dari laravel yang sudah termasuk login, registrasi, verifikasi email, two-factor authentication, dan manajemen tim. cocok buat kalian yang mau langsung fokus ke fitur utama tanpa pusing bikin autentikasi dari nol.


15. Troubleshooting

Cara Mengatasi Error 500 di Laravel

error 500 itu error paling umum di laravel, dan biasanya penyebabnya hal yang sederhana. urutan cek yang biasa saya lakukan:

  1. Cek log error di storage/logs/laravel.log, dari situ biasanya langsung kelihatan penyebabnya
  2. Clear semua cache
    php artisan cache:clear
    php artisan config:clear
    php artisan route:clear
    php artisan view:clear
    
  3. Periksa permission folder storage dan bootstrap/cache, pastikan bisa ditulis oleh server

pengalaman yang paling sering saya temui di project laravel: lupa menjalankan php artisan storage:link, atau .env tidak ke-copy saat pindah project. dua-duanya bikin error 500 tapi tidak tertulis jelas di log kalau tidak teliti 🙂

untuk kasus error lain yang sering terjadi, baca juga:

Clear Cache

kalau perubahan config atau route tidak kelihatan efeknya, biasanya cache yang masih nyangkut. bersihkan dengan:

# Bersihkan semua cache sekaligus
php artisan optimize:clear

# atau satu per satu
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan event:clear

Baca Juga Mengenai :


Pertanyaan yang Sering Diajukan

Laravel cocok untuk pemula?

cocok. laravel punya dokumentasi yang sangat baik, komunitas besar, dan banyak tutorial berbahasa indonesia. kuncinya jangan mulai dari hafalan konsep MVC, langsung bangun route dan controller pertama, konsepnya bakal masuk sendiri sambil praktek.

Berapa lama belajar Laravel untuk bisa kerja?

dengan belajar 2-3 jam per hari, kalian bisa membangun aplikasi CRUD dalam 1-2 bulan. buat project production butuh pengalaman 3-6 bulan. saran saya jangan menunggu paham semua dulu, langsung buat project CRUD sederhana kayak daftar tugas.

Versi Laravel apa yang sedang aktif di 2026?

di 2026 Laravel 13 resmi rilis 17 Maret 2026 (butuh PHP 8.3 ke atas) dan Laravel 12 masih aktif, bug fix sampai 13 Agustus 2026 dan security sampai 24 Februari 2027. untuk project baru, pakai Laravel 12 kalau server masih PHP 8.2, atau langsung 13 kalau sudah PHP 8.3.

Cara deploy Laravel di shared hosting?

jalankan php artisan config:cache, pastikan folder storage punya permission yang benar, dan root domain menunjuk ke folder public. jangan lupa APP_DEBUG=false di file .env.

Laravel atau CodeIgniter?

laravel lebih modern, fiturnya lebih banyak, cocok buat project menengah ke besar. codeigniter lebih ringan dan sederhana, cocok buat project kecil yang butuh loading cepat.

Sigit Nurhanafi avatar
Full-stack developer & technical writer. Berpengalaman di PHP, Laravel, NodeJS, MySQL, dan Python. Aktif menulis tutorial pemrograman dan maintaining open-source projects di PemburuKode sejak 2021.