Laravel Dasar - Framework PHP Terpopuler
Dipublikasikan pada 15 Januari 2024 โข โฑ๏ธ 60 menit baca
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)
@empty
No posts found.
@endforelse
@endsection
Components
# Buat component
php artisan make:component Alert
File: resources/views/components/alert.blade.php
{{ $slot }}
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