Laravel Dasar - Framework PHP Terpopuler

Dipublikasikan pada 15 Januari 2024 โ€ข โฑ๏ธ 60 menit baca

Prasyarat: Pastikan Anda sudah memahami PHP dasar, OOP, dan Composer sebelum mempelajari Laravel.

Apa itu Laravel?

Laravel adalah framework PHP yang elegan dan ekspresif untuk pengembangan web. Laravel menyediakan sintaks yang bersih dan fitur-fitur canggih seperti:

  • Eloquent ORM - Object-Relational Mapping yang powerful
  • Artisan CLI - Command line interface untuk otomasi
  • Blade Template Engine - Template engine yang powerful
  • Migration - Version control untuk database
  • Middleware - Filter HTTP requests
  • Queue - Background job processing

Keunggulan Laravel

๐Ÿš€ Rapid Development

Fitur-fitur built-in yang memungkinkan pengembangan cepat.

๐Ÿ”ง Convention over Configuration

Mengikuti konvensi standar untuk mengurangi konfigurasi.

๐Ÿ”’ Security

Built-in security features seperti CSRF protection, hash, encryption.

๐Ÿ“š Rich Ecosystem

Ekosistem yang kaya dengan package dan tools.

Instalasi Laravel

Prasyarat Sistem

  • PHP >= 8.1
  • Composer
  • Web server (Apache/Nginx)
  • Database (MySQL/PostgreSQL/SQLite)

1. Instalasi via Composer

# Buat project Laravel baru
composer create-project laravel/laravel my-app

# Masuk ke direktori project
cd my-app

# Jalankan development server
php artisan serve

2. Instalasi via Laravel Installer

# Install Laravel installer
composer global require laravel/installer

# Buat project baru
laravel new my-app

3. Konfigurasi Environment

# Copy file .env
cp .env.example .env

# Generate application key
php artisan key:generate

Edit file .env untuk konfigurasi database:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=

Struktur Direktori Laravel

laravel-project/
โ”œโ”€โ”€ app/                    # Logic aplikasi
โ”‚   โ”œโ”€โ”€ Console/           # Artisan commands
โ”‚   โ”œโ”€โ”€ Http/              # Controllers, Middleware, Requests
โ”‚   โ”‚   โ”œโ”€โ”€ Controllers/   # Controllers
โ”‚   โ”‚   โ””โ”€โ”€ Middleware/    # Middleware
โ”‚   โ”œโ”€โ”€ Models/            # Eloquent models
โ”‚   โ””โ”€โ”€ Providers/         # Service providers
โ”œโ”€โ”€ bootstrap/             # Framework bootstrap files
โ”œโ”€โ”€ config/                # Configuration files
โ”œโ”€โ”€ database/              # Migrations, seeds, factories
โ”‚   โ”œโ”€โ”€ migrations/        # Database migrations
โ”‚   โ””โ”€โ”€ seeders/          # Database seeders
โ”œโ”€โ”€ public/                # Public files (index.php, assets)
โ”œโ”€โ”€ resources/             # Views, raw assets
โ”‚   โ”œโ”€โ”€ css/              # CSS files
โ”‚   โ”œโ”€โ”€ js/               # JavaScript files
โ”‚   โ””โ”€โ”€ views/            # Blade templates
โ”œโ”€โ”€ routes/                # Route definitions
โ”‚   โ”œโ”€โ”€ web.php           # Web routes
โ”‚   โ””โ”€โ”€ api.php           # API routes
โ”œโ”€โ”€ storage/               # Logs, cache, session files
โ”œโ”€โ”€ tests/                 # Automated tests
โ”œโ”€โ”€ vendor/                # Composer dependencies
โ”œโ”€โ”€ .env                   # Environment configuration
โ”œโ”€โ”€ artisan               # Artisan CLI
โ””โ”€โ”€ composer.json         # Composer configuration

Direktori Penting

  • app/ - Berisi logic aplikasi utama
  • config/ - File konfigurasi aplikasi
  • database/ - Migration dan seeder
  • public/ - Entry point dan asset publik
  • resources/ - View template dan raw asset
  • routes/ - Definisi routing

Routing di Laravel

Routing menentukan bagaimana aplikasi merespons request ke URL tertentu.

Basic Routing

File: routes/web.php

<?php

use Illuminate\Support\Facades\Route;

// Basic GET route
Route::get('/', function () {
    return view('welcome');
});

// Route dengan parameter
Route::get('/user/{id}', function ($id) {
    return 'User ID: ' . $id;
});

// Route dengan parameter opsional
Route::get('/user/{name?}', function ($name = 'Guest') {
    return 'Hello ' . $name;
});

// Route dengan constraints
Route::get('/user/{id}', function ($id) {
    return 'User ID: ' . $id;
})->where('id', '[0-9]+');

// Named routes
Route::get('/profile', function () {
    return view('profile');
})->name('profile');

// Route groups
Route::prefix('admin')->group(function () {
    Route::get('/users', function () {
        return 'Admin Users';
    });
    Route::get('/posts', function () {
        return 'Admin Posts';
    });
});

?>

HTTP Methods

<?php

// GET request
Route::get('/posts', function () {
    return 'All posts';
});

// POST request
Route::post('/posts', function () {
    return 'Create new post';
});

// PUT request
Route::put('/posts/{id}', function ($id) {
    return 'Update post ' . $id;
});

// DELETE request
Route::delete('/posts/{id}', function ($id) {
    return 'Delete post ' . $id;
});

// Multiple methods
Route::match(['get', 'post'], '/contact', function () {
    return 'Contact form';
});

// Any method
Route::any('/search', function () {
    return 'Search page';
});

?>

Controllers di Laravel

Controllers berisi logic untuk menghandle request HTTP.

Membuat Controller

# Buat controller
php artisan make:controller PostController

# Buat resource controller
php artisan make:controller PostController --resource

# Buat controller dengan model
php artisan make:controller PostController --model=Post

Basic Controller

File: app/Http/Controllers/PostController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        $posts = [
            ['id' => 1, 'title' => 'First Post'],
            ['id' => 2, 'title' => 'Second Post'],
        ];
        
        return view('posts.index', compact('posts'));
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        return view('posts.create');
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        // Validasi input
        $request->validate([
            'title' => 'required|max:255',
            'content' => 'required',
        ]);

        // Logic untuk menyimpan post
        
        return redirect()->route('posts.index')
                        ->with('success', 'Post created successfully!');
    }

    /**
     * Display the specified resource.
     */
    public function show($id)
    {
        // Logic untuk menampilkan post
        return view('posts.show', compact('id'));
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit($id)
    {
        // Logic untuk menampilkan form edit
        return view('posts.edit', compact('id'));
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, $id)
    {
        // Logic untuk update post
        
        return redirect()->route('posts.index')
                        ->with('success', 'Post updated successfully!');
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy($id)
    {
        // Logic untuk hapus post
        
        return redirect()->route('posts.index')
                        ->with('success', 'Post deleted successfully!');
    }
}

?>

Route ke Controller

File: routes/web.php

<?php

use App\Http\Controllers\PostController;

// Single action
Route::get('/posts', [PostController::class, 'index']);

// Resource routes (CRUD)
Route::resource('posts', PostController::class);

// Partial resource routes
Route::resource('posts', PostController::class)->only([
    'index', 'show'
]);

Route::resource('posts', PostController::class)->except([
    'create', 'store'
]);

?>

Views dan Blade Template

Laravel menggunakan Blade sebagai template engine yang powerful dan mudah digunakan.

Basic Blade Template

File: resources/views/welcome.blade.php




    
    
    {{ $title ?? 'Laravel App' }}


    

Welcome to Laravel!

{{-- Ini adalah komentar Blade --}} {{-- Menampilkan variabel --}}

Hello, {{ $name }}!

{{-- Menampilkan variabel dengan default --}}

User: {{ $user ?? 'Guest' }}

{{-- Raw HTML (hati-hati dengan XSS) --}}

{!! $htmlContent !!}

{{-- Conditional --}} @if($user)

Welcome back, {{ $user->name }}!

@else

Please log in.

@endif {{-- Loop --}}
    @foreach($posts as $post)
  • {{ $post->title }}
  • @endforeach

Layout dan Inheritance

File: resources/views/layouts/app.blade.php




    
    
    @yield('title', 'Laravel App')
    
    @stack('styles')


    

    
@yield('content')
@stack('scripts')

File: resources/views/posts/index.blade.php

@extends('layouts.app')

@section('title', 'All Posts')

@section('content')
    

All Posts

Create Post
@if(session('success'))
{{ session('success') }}
@endif
@forelse($posts as $post)
{{ $post->title }}

{{ Str::limit($post->content, 100) }}

Read More
@empty
No posts found.
@endforelse
@endsection

Components

# Buat component
php artisan make:component Alert

File: resources/views/components/alert.blade.php

Penggunaan component:


    Post created successfully!

Tips dan Best Practices

โœ… Do (Lakukan)
  • Gunakan Eloquent ORM untuk database operations
  • Manfaatkan validation rules
  • Gunakan middleware untuk authentication
  • Ikuti PSR standards untuk coding
  • Gunakan resource controllers untuk CRUD
  • Manfaatkan service container untuk dependency injection
โŒ Don't (Jangan)
  • Jangan langsung query database di view
  • Jangan hardcode values dalam controller
  • Jangan skip validation pada input user
  • Jangan gunakan raw SQL tanpa alasan kuat
  • Jangan commit file .env ke repository
  • Jangan abaikan security best practices
Tutorial Saat Ini
Level: Lanjutan

Untuk yang sudah mahir PHP dan ingin mendalami

Daftar Isi
Tips Belajar