Laravel adalah framework PHP yang sedang naik daun. Kepopulerannya tak lepas dari kemudahannya, fitur-fiturnya yang lengkap, dan kemampuannya mempercepat proses pengembangan web. Kalau kamu seorang pemula yang ingin belajar PHP, Laravel adalah pilihan yang tepat untuk memperluas skillsetmu. Artikel ini adalah tutorial lengkap Laravel untuk pemula bahasa Indonesia yang akan membimbingmu langkah demi langkah dalam mempelajari framework PHP terpopuler ini. Siap? Mari kita mulai!
Daftar Isi:
- Mengapa Memilih Laravel? Keunggulan dan Manfaat Belajar Framework PHP Laravel
- Persiapan Awal: Instalasi dan Konfigurasi Laravel di Lingkungan Pengembangan Lokal
- Mengenal Arsitektur MVC (Model-View-Controller) dalam Laravel
- Routing di Laravel: Mengarahkan Pengguna ke Halaman yang Tepat
- Blade Templating Engine: Membuat Tampilan Web yang Dinamis dan Reusable
- Eloquent ORM: Berinteraksi dengan Database dengan Mudah dan Efisien
- Form Handling dan Validasi: Menerima dan Memproses Input Pengguna dengan Aman
- Middleware: Mengamankan dan Memfilter Request HTTP di Laravel
- Authentication dan Authorization: Membangun Sistem Keamanan yang Kuat
- Penggunaan Artisan Console: Mempercepat Pengembangan dengan Perintah CLI
- Pengujian (Testing) Laravel: Memastikan Kualitas Kode dan Aplikasi
- Deploy Aplikasi Laravel: Mempublikasikan Website Kamu ke Internet
1. Mengapa Memilih Laravel? Keunggulan dan Manfaat Belajar Framework PHP Laravel
Sebelum kita terjun lebih dalam, mari kita bahas mengapa belajar Laravel itu penting. PHP sendiri adalah bahasa pemrograman yang sangat populer untuk pengembangan web, dan Laravel adalah salah satu framework yang paling digemari. Kenapa? Karena Laravel menawarkan banyak keuntungan:
- Kemudahan dan Kejelasan: Laravel memiliki sintaks yang bersih, elegan, dan mudah dipahami. Ini sangat membantu terutama untuk pemula. Kode yang mudah dibaca sama dengan kode yang mudah dipelihara.
- Fitur Lengkap: Laravel hadir dengan banyak fitur bawaan seperti routing, templating, ORM (Object Relational Mapper), authentication, authorization, dan banyak lagi. Kamu tidak perlu lagi membangun fitur-fitur dasar dari awal.
- Keamanan: Laravel memprioritaskan keamanan. Framework ini menyediakan perlindungan bawaan terhadap serangan umum seperti SQL injection, cross-site scripting (XSS), dan cross-site request forgery (CSRF).
- Komunitas Besar dan Aktif: Laravel memiliki komunitas pengembang yang besar dan aktif di seluruh dunia. Ini berarti banyak sumber daya, tutorial, dan dukungan yang tersedia jika kamu mengalami masalah.
- Artisan Console: Laravel menyediakan Artisan, sebuah command-line interface (CLI) yang sangat powerful. Artisan membantu mempercepat pengembangan dengan menyediakan perintah untuk membuat controller, model, migration, dan banyak lagi.
- Eloquent ORM: Berinteraksi dengan database menjadi lebih mudah dengan Eloquent ORM. Kamu tidak perlu lagi menulis query SQL yang panjang dan rumit.
- Job Queue dan Task Scheduling: Laravel memungkinkan kamu menjalankan tugas-tugas yang memakan waktu lama (seperti mengirim email atau memproses data) di latar belakang menggunakan job queue. Kamu juga dapat menjadwalkan tugas untuk dijalankan secara otomatis pada waktu tertentu.
- Ekosistem Kaya: Laravel memiliki ekosistem yang kaya dengan banyak paket dan library yang tersedia. Kamu dapat menggunakan paket-paket ini untuk menambahkan fungsionalitas tambahan ke aplikasi kamu.
Manfaat belajar framework PHP Laravel sangat terasa saat kamu ingin membangun aplikasi web yang kompleks dan scalable. Dengan Laravel, kamu bisa fokus pada logika bisnis aplikasi kamu, tanpa harus khawatir tentang detail implementasi teknis yang rumit.
2. Persiapan Awal: Instalasi dan Konfigurasi Laravel di Lingkungan Pengembangan Lokal
Sebelum mulai coding, kita perlu menyiapkan lingkungan pengembangan. Ada beberapa cara untuk menginstal Laravel. Cara yang paling umum dan direkomendasikan adalah menggunakan Composer.
Langkah-langkah Instalasi Laravel:
-
Pastikan PHP dan Composer Terinstall: Pastikan kamu sudah menginstal PHP (versi 7.4 ke atas) dan Composer di komputermu. Kamu bisa mengunduh dan menginstal Composer dari https://getcomposer.org/.
-
Instal Laravel Menggunakan Composer: Buka terminal atau command prompt dan jalankan perintah berikut untuk membuat proyek Laravel baru:
composer create-project --prefer-dist laravel/laravel nama-proyek-kamu
Ganti
nama-proyek-kamu
dengan nama yang kamu inginkan untuk proyek Laravelmu. Contoh:composer create-project --prefer-dist laravel/laravel blog-sederhana
-
Masuk ke Direktori Proyek: Setelah proses instalasi selesai, masuk ke direktori proyek yang baru dibuat:
cd nama-proyek-kamu
-
Konfigurasi Environment (.env): Laravel menggunakan file
.env
untuk menyimpan konfigurasi lingkungan. File ini berisi informasi seperti koneksi database, pengaturan email, dan kunci aplikasi. Salin file.env.example
menjadi.env
:cp .env.example .env
Buka file
.env
dengan text editor dan konfigurasi pengaturan yang sesuai. Yang paling penting adalah mengatur koneksi database:DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=nama_database_kamu DB_USERNAME=username_database_kamu DB_PASSWORD=password_database_kamu
Ganti nilai-nilai di atas dengan informasi koneksi database MySQL kamu. Pastikan database sudah dibuat sebelumnya.
-
Generate Application Key: Jalankan perintah berikut untuk membuat kunci aplikasi yang unik:
php artisan key:generate
Perintah ini akan menghasilkan kunci aplikasi dan menyimpannya di file
.env
. -
Jalankan Development Server: Laravel menyediakan development server bawaan. Jalankan server ini dengan perintah:
php artisan serve
Buka browser dan kunjungi
http://127.0.0.1:8000
(atau alamat yang ditampilkan di terminal) untuk melihat halaman default Laravel. Selamat! Kamu berhasil menginstal Laravel!
Tips Konfigurasi Tambahan:
- XAMPP/WAMP/MAMP: Jika kamu menggunakan XAMPP, WAMP, atau MAMP, pastikan server web dan database MySQL sudah berjalan sebelum menginstal dan menjalankan Laravel.
- Homestead/Sail: Laravel juga menyediakan lingkungan pengembangan yang lebih canggih yaitu Homestead (untuk VirtualBox) dan Sail (untuk Docker). Ini adalah pilihan yang baik jika kamu ingin memiliki lingkungan pengembangan yang konsisten dan terisolasi.
3. Mengenal Arsitektur MVC (Model-View-Controller) dalam Laravel
Laravel menganut arsitektur MVC (Model-View-Controller). Memahami arsitektur ini sangat penting karena akan membantu kamu mengatur kode dan membangun aplikasi yang terstruktur.
- Model: Model mewakili data aplikasi. Model bertanggung jawab untuk berinteraksi dengan database (mengambil, menyimpan, dan memperbarui data). Di Laravel, Model biasanya berkorespondensi dengan tabel database. Kita menggunakan Eloquent ORM untuk mendefinisikan Model dan melakukan operasi database.
- View: View adalah lapisan presentasi. View bertanggung jawab untuk menampilkan data kepada pengguna. Di Laravel, View biasanya berupa file HTML yang menggunakan Blade templating engine.
- Controller: Controller adalah perantara antara Model dan View. Controller menerima request dari pengguna, memproses request tersebut, mengambil data dari Model, dan mengirim data ke View untuk ditampilkan.
Bagaimana MVC Bekerja dalam Laravel:
- Pengguna Mengirim Request: Pengguna mengakses URL di browser.
- Routing: Router Laravel menerima request dan menentukan controller mana yang harus menangani request tersebut.
- Controller: Controller memproses request, berinteraksi dengan Model untuk mengambil atau memanipulasi data, dan menyiapkan data yang akan dikirim ke View.
- Model: Model berinteraksi dengan database untuk mengambil, menyimpan, atau memperbarui data.
- View: View menerima data dari Controller dan menampilkannya kepada pengguna dalam format HTML.
- Response: View menghasilkan response HTML yang dikirim kembali ke browser pengguna.
Dengan memahami arsitektur MVC, kamu dapat memisahkan logika bisnis aplikasi kamu dari presentasi. Ini membuat kode lebih mudah dibaca, dipelihara, dan diuji.
4. Routing di Laravel: Mengarahkan Pengguna ke Halaman yang Tepat
Routing adalah proses mengarahkan pengguna ke halaman yang sesuai berdasarkan URL yang mereka akses. Di Laravel, routing didefinisikan di file routes/web.php
dan routes/api.php
.
Jenis-jenis Route:
- GET: Untuk mengambil data.
- POST: Untuk mengirim data (biasanya digunakan untuk form).
- PUT/PATCH: Untuk memperbarui data.
- DELETE: Untuk menghapus data.
Contoh Routing di Laravel:
// routes/web.php
use IlluminateSupportFacadesRoute;
// Route untuk halaman utama
Route::get('/', function () {
return view('welcome');
});
// Route untuk halaman about
Route::get('/about', function () {
return 'Halaman About';
});
// Route dengan parameter
Route::get('/user/{id}', function ($id) {
return 'User ID: ' . $id;
});
// Route ke controller
Route::get('/blog', [AppHttpControllersBlogController::class, 'index']);
Penjelasan:
Route::get('/', ...)
: Mendefinisikan route GET untuk URL/
. Ketika pengguna mengakses halaman utama, Laravel akan menjalankan fungsi callback yang mengembalikan viewwelcome
.Route::get('/about', ...)
: Mendefinisikan route GET untuk URL/about
. Ketika pengguna mengakses halaman about, Laravel akan menjalankan fungsi callback yang mengembalikan string “Halaman About”.Route::get('/user/{id}', ...)
: Mendefinisikan route GET untuk URL/user/{id}
.{id}
adalah parameter yang akan diambil dari URL. Ketika pengguna mengakses URL seperti/user/123
, nilaiid
akan menjadi123
.Route::get('/blog', [AppHttpControllersBlogController::class, 'index'])
: Mendefinisikan route GET untuk URL/blog
. Ketika pengguna mengakses URL ini, Laravel akan menjalankan methodindex
pada controllerAppHttpControllersBlogController
.
Route Parameters:
Kamu dapat menggunakan parameter untuk menangkap nilai dari URL. Ada dua jenis parameter:
- Required Parameters: Parameter yang harus ada dalam URL. Contoh:
/user/{id}
- Optional Parameters: Parameter yang tidak harus ada dalam URL. Contoh:
/user/{name?}
(tanda?
menandakan parameter opsional)
Named Routes:
Kamu dapat memberikan nama ke route untuk memudahkan penggunaan.
Route::get('/profile', [AppHttpControllersProfileController::class, 'index'])->name('profile');
// Untuk menghasilkan URL ke route profile:
$url = route('profile'); // Akan menghasilkan: /profile
Route Groups:
Kamu dapat mengelompokkan route dengan menggunakan Route Groups. Ini berguna untuk menerapkan middleware atau prefix ke beberapa route sekaligus.
Route::middleware(['auth'])->group(function () {
Route::get('/dashboard', function () {
return view('dashboard');
});
Route::get('/settings', function () {
return view('settings');
});
});
Contoh di atas menunjukkan bahwa route /dashboard
dan /settings
hanya dapat diakses oleh pengguna yang sudah terautentikasi (karena middleware auth
).
5. Blade Templating Engine: Membuat Tampilan Web yang Dinamis dan Reusable
Blade adalah templating engine yang disediakan oleh Laravel. Blade memungkinkan kamu membuat tampilan web yang dinamis dan reusable dengan menggunakan sintaks yang sederhana dan intuitif.
Keunggulan Blade Templating Engine:
- Sintaks Mudah Dipelajari: Blade menggunakan sintaks yang berbasis PHP, sehingga mudah dipelajari oleh pengembang PHP.
- Template Inheritance: Blade mendukung template inheritance, yang memungkinkan kamu membuat template dasar dan memperluasnya ke template lainnya. Ini mengurangi duplikasi kode dan memudahkan pemeliharaan.
- Directives: Blade menyediakan banyak directives yang berguna seperti
@if
,@foreach
,@include
,@extends
,@yield
, dan banyak lagi. - Escaping Otomatis: Blade secara otomatis melakukan escaping terhadap data yang ditampilkan, sehingga melindungi aplikasi kamu dari serangan XSS.
Contoh Penggunaan Blade:
Buat file resources/views/welcome.blade.php
dengan kode berikut:
<!DOCTYPE html>
<html>
<head>
<title>Selamat Datang</title>
</head>
<body>
<h1>Selamat Datang, {{ $nama }}!</h1>
@if ($umur > 18)
<p>Anda sudah dewasa.</p>
@else
<p>Anda masih di bawah umur.</p>
@endif
<ul>
@foreach ($hobi as $hobiItem)
<li>{{ $hobiItem }}</li>
@endforeach
</ul>
</body>
</html>
Kemudian, di controller kamu (misalnya AppHttpControllersHomeController
), tambahkan kode berikut:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class HomeController extends Controller
{
public function index()
{
$data = [
'nama' => 'John Doe',
'umur' => 25,
'hobi' => ['Membaca', 'Menulis', 'Coding'],
];
return view('welcome', $data);
}
}
Dan tambahkan route di routes/web.php
:
Route::get('/home', [AppHttpControllersHomeController::class, 'index']);
Penjelasan:
{{ $nama }}
: Menampilkan nilai variabel$nama
.@if ($umur > 18) ... @else ... @endif
: Struktur kontrolif-else
.@foreach ($hobi as $hobiItem) ... @endforeach
: Struktur kontrolforeach
untuk melakukan looping pada array$hobi
.view('welcome', $data)
: Menampilkan viewwelcome.blade.php
dan mengirim data$data
ke view.
Template Inheritance:
Buat file resources/views/layouts/app.blade.php
sebagai template dasar:
<!DOCTYPE html>
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@yield('content')
</body>
</html>
Kemudian, buat file resources/views/pages/about.blade.php
yang memperluas template dasar:
@extends('layouts.app')
@section('title', 'Halaman About')
@section('content')
<h1>Halaman About</h1>
<p>Ini adalah halaman tentang kami.</p>
@endsection
Penjelasan:
@extends('layouts.app')
: Menunjukkan bahwa template ini memperluas templatelayouts/app.blade.php
.@section('title', 'Halaman About')
: Mengisi bagiantitle
pada template dasar dengan nilai “Halaman About”.@section('content') ... @endsection
: Mengisi bagiancontent
pada template dasar dengan konten halaman about.
6. Eloquent ORM: Berinteraksi dengan Database dengan Mudah dan Efisien
Eloquent ORM adalah fitur powerful di Laravel yang memungkinkan kamu berinteraksi dengan database dengan cara yang lebih mudah dan efisien. Dengan Eloquent, kamu tidak perlu lagi menulis query SQL yang panjang dan rumit.
Keunggulan Eloquent ORM:
- Sintaks yang Sederhana dan Intuitif: Eloquent menggunakan sintaks yang mudah dipahami dan ditulis.
- Active Record Pattern: Eloquent menerapkan Active Record pattern, di mana setiap model mewakili sebuah tabel database.
- Query Builder: Eloquent menyediakan query builder yang powerful untuk membangun query database secara fleksibel.
- Relationships: Eloquent mendukung berbagai jenis relationships antar model seperti one-to-one, one-to-many, many-to-many, dan polymorphic relationships.
Contoh Penggunaan Eloquent:
-
Membuat Model: Buat model
Post
dengan perintah Artisan:php artisan make:model Post
Ini akan membuat file
app/Models/Post.php
. -
Migrasi: Buat migrasi untuk tabel
posts
:php artisan make:migration create_posts_table
Buka file migrasi yang baru dibuat (di direktori
database/migrations
) dan tambahkan kode berikut:<?php use IlluminateDatabaseMigrationsMigration; use IlluminateDatabaseSchemaBlueprint; use IlluminateSupportFacadesSchema; class CreatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->string('title'); $table->text('content'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('posts'); } }
Jalankan migrasi untuk membuat tabel
posts
di database:php artisan migrate
-
Menggunakan Model: Buka file
app/Models/Post.php
dan tambahkan kode berikut:<?php namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateDatabaseEloquentModel; class Post extends Model { use HasFactory; protected $fillable = ['title', 'content']; }
protected $fillable = ['title', 'content'];
menentukan field mana yang boleh diisi secara massal (mass assignment).
Operasi Database dengan Eloquent:
-
Membuat Data Baru:
$post = new Post(); $post->title = 'Judul Post Baru'; $post->content = 'Konten Post Baru'; $post->save(); // Atau menggunakan mass assignment: $post = Post::create(['title' => 'Judul Post Baru', 'content' => 'Konten Post Baru']);
-
Mengambil Data:
// Mengambil semua data: $posts = Post::all(); // Mengambil data berdasarkan ID: $post = Post::find(1); // Mengambil data dengan kondisi: $posts = Post::where('title', 'like', '%Judul%')->get();
-
Memperbarui Data:
$post = Post::find(1); $post->title = 'Judul Post yang Diperbarui'; $post->save(); // Atau menggunakan mass assignment: Post::where('id', 1)->update(['title' => 'Judul Post yang Diperbarui']);
-
Menghapus Data:
$post = Post::find(1); $post->delete(); // Atau: Post::destroy(1);
Eloquent juga mendukung relationships, eager loading, dan fitur-fitur canggih lainnya. Pelajari lebih lanjut tentang Eloquent di dokumentasi Laravel: https://laravel.com/docs/
7. Form Handling dan Validasi: Menerima dan Memproses Input Pengguna dengan Aman
Form Handling dan Validasi sangat penting untuk membangun aplikasi web yang interaktif dan aman. Laravel menyediakan fitur-fitur yang memudahkan kamu untuk menerima dan memproses input pengguna dengan benar.
Langkah-langkah Form Handling dan Validasi:
-
Membuat Form: Buat form HTML di view. Contoh:
<form method="POST" action="/submit-form"> @csrf <label for="nama">Nama:</label><br> <input type="text" id="nama" name="nama"><br><br> <label for="email">Email:</label><br> <input type="email" id="email" name="email"><br><br> <button type="submit">Submit</button> </form>
@csrf
adalah directive Blade untuk menambahkan CSRF token ke form, yang melindungi aplikasi dari serangan CSRF. -
Membuat Route: Buat route untuk menangani form submission:
Route::post('/submit-form', [AppHttpControllersFormController::class, 'submitForm']);
-
Membuat Controller: Buat controller untuk memproses form:
php artisan make:controller FormController
Buka file
app/Http/Controllers/FormController.php
dan tambahkan kode berikut:<?php namespace AppHttpControllers; use IlluminateHttpRequest; use IlluminateSupportFacadesValidator; class FormController extends Controller { public function submitForm(Request $request) { $validator = Validator::make($request->all(), [ 'nama' => 'required|max:255', 'email' => 'required|email', ]); if ($validator->fails()) { return redirect('/') ->withErrors($validator) ->withInput(); } // Proses data form $nama = $request->input('nama'); $email = $request->input('email'); return 'Terima kasih, ' . $nama . '! Email Anda: ' . $email; } }
Penjelasan:
$request->all()
: Mengambil semua input dari form.Validator::make()
: Membuat instance validator untuk memvalidasi input.'nama' => 'required|max:255'
: Aturan validasi untuk fieldnama
: harus diisi (required) dan panjang maksimal 255 karakter.'email' => 'required|email'
: Aturan validasi untuk fieldemail
: harus diisi dan harus berupa alamat email yang valid.$validator->fails()
: Memeriksa apakah validasi gagal.redirect()->withErrors($validator)->withInput()
: Mengembalikan pengguna ke halaman sebelumnya dengan pesan error dan input yang diisi.$request->input('nama')
: Mengambil nilai inputnama
.
Menampilkan Pesan Error:
Untuk menampilkan pesan error di view, gunakan $errors
variable yang disediakan oleh Laravel:
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
Custom Validation Rules:
Kamu juga dapat membuat custom validation rules sendiri. Pelajari lebih lanjut di dokumentasi Laravel: https://laravel.com/docs/
8. Middleware: Mengamankan dan Memfilter Request HTTP di Laravel
Middleware adalah lapisan antara request HTTP dan aplikasi kamu. Middleware memungkinkan kamu mengamankan dan memfilter request HTTP sebelum mencapai controller.
Contoh Penggunaan Middleware:
- Autentikasi: Memastikan bahwa hanya pengguna yang terautentikasi yang dapat mengakses halaman tertentu.
- Otorisasi: Memeriksa apakah pengguna memiliki izin yang cukup untuk melakukan tindakan tertentu.
- Logging: Mencatat semua request yang masuk.
- Modifikasi Request/Response: Memodifikasi request sebelum mencapai controller atau memodifikasi response sebelum dikirim ke pengguna.
Cara Membuat Middleware:
-
Membuat Middleware: Gunakan perintah Artisan:
php artisan make:middleware CheckAge
Ini akan membuat file
app/Http/Middleware/CheckAge.php
. -
Menulis Kode Middleware: Buka file
app/Http/Middleware/CheckAge.php
dan tambahkan kode berikut:<?php namespace AppHttpMiddleware; use Closure; use IlluminateHttpRequest; class CheckAge { /** * Handle an incoming request. * * @param IlluminateHttpRequest $request * @param Closure(IlluminateHttpRequest): (IlluminateHttpResponse|IlluminateHttpRedirectResponse) $next * @return IlluminateHttpResponse|IlluminateHttpRedirectResponse */ public function handle(Request $request, Closure $next, $age) { if ($request->age < $age) { return redirect('/underage'); } return $next($request); } }
Penjelasan:
handle(Request $request, Closure $next, $age)
: Method yang akan dijalankan ketika middleware dipanggil.$request
: Objek request HTTP.$next
: Closure yang harus dipanggil untuk melanjutkan request ke controller.$age
: Parameter yang diteruskan ke middleware dari route.return redirect('/underage')
: Mengarahkan pengguna ke halaman/underage
jika umur kurang dari$age
.return $next($request)
: Melanjutkan request ke controller.
-
Mendaftarkan Middleware: Buka file
app/Http/Kernel.php
dan daftarkan middleware di$routeMiddleware
:protected $routeMiddleware = [ 'auth' => AppHttpMiddlewareAuthenticate::class, 'cache.headers' => IlluminateHttpMiddlewareSetCacheHeaders::class, 'can' => IlluminateAuthMiddlewareAuthorize::class, 'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class, 'signed' => IlluminateRoutingMiddlewareValidateSignature::class, 'throttle' => IlluminateRoutingMiddlewareThrottleRequests::class, 'verified' => IlluminateAuthMiddlewareEnsureEmailIsVerified::class, 'checkage' => AppHttpMiddlewareCheckAge::class, // Tambahkan baris ini ];
-
Menggunakan Middleware di Route:
Route::get('/adult/{age}', function ($age) { return 'Selamat datang, Anda sudah dewasa.'; })->middleware('checkage:18');
->middleware('checkage:18')
menerapkan middlewareCheckAge
ke route ini dan mengirimkan parameter18
ke middleware.
9. Authentication dan Authorization: Membangun Sistem Keamanan yang Kuat
Authentication (autentikasi) dan authorization (otorisasi) adalah dua komponen penting dalam membangun sistem keamanan yang kuat untuk aplikasi web kamu.
- Authentication: Proses memverifikasi identitas pengguna.
- Authorization: Proses menentukan apa yang boleh dilakukan oleh pengguna setelah mereka terautentikasi.
Laravel Breeze dan Jetstream:
Laravel menyediakan package laravel/breeze
dan laravel/jetstream
yang memudahkan kamu untuk membuat sistem autentikasi.
- Laravel Breeze: Implementasi autentikasi sederhana dan minimalis menggunakan Blade templating engine.
- Laravel Jetstream: Implementasi autentikasi yang lebih lengkap dan canggih dengan dukungan untuk tim, API token, dan two-factor authentication, menggunakan Livewire atau Inertia.js.
Contoh Menggunakan Laravel Breeze:
-
Instal Laravel Breeze:
composer require laravel/breeze --dev php artisan breeze:install npm install npm run dev
-
Migrasi Database:
php artisan migrate
-
Jalankan Development Server:
php artisan serve
Sekarang, kamu dapat mengakses halaman
/register
dan/login
untuk mendaftar dan login.
Otorisasi (Authorization):
Laravel menggunakan policies untuk menentukan apa yang boleh dilakukan oleh pengguna.
-
Membuat Policy:
php artisan make:policy PostPolicy --model=Post
Ini akan membuat file
app/Policies/PostPolicy.php
. -
Menulis Kode Policy: Buka file
app/Policies/PostPolicy.php
dan tambahkan kode berikut:<?php namespace AppPolicies; use AppModelsUser; use AppModelsPost; use IlluminateAuthAccessHandlesAuthorization; class PostPolicy { use HandlesAuthorization; /** * Determine whether the user can view any models. * * @param AppModelsUser $user * @return IlluminateAuthAccessResponse|bool */ public function viewAny(User $user) { return true; // Semua pengguna boleh melihat semua post } /** * Determine whether the user can view the model. * * @param AppModelsUser $user * @param AppModelsPost $post * @return IlluminateAuthAccessResponse|bool */ public function view(User $user, Post $post) { return true; // Semua pengguna boleh melihat post tertentu } /** * Determine whether the user can create models. * * @param AppModelsUser $user * @return IlluminateAuthAccessResponse|bool */ public function create(User $user) { return $user->is_admin; // Hanya admin yang boleh membuat post } /** * Determine whether the user can update the model. * * @param AppModelsUser $user * @param AppModelsPost $post * @return IlluminateAuthAccessResponse|bool */ public function update(User $user, Post $post) { return $user->id === $post->user_id; // Hanya pemilik post yang boleh memperbarui post } /** * Determine whether the user can delete the model. * * @param AppModelsUser $user * @param AppModelsPost $post * @return IlluminateAuthAccessResponse|bool */ public function delete(User $user, Post $post) { return $user->id === $post->user_id || $user->is_admin; // Hanya pemilik post atau admin yang boleh menghapus post } }
-
Mendaftarkan Policy: Buka file
app/Providers/AuthServiceProvider.php
dan daftarkan policy di$policies
:protected $policies = [ // 'AppModelsModel' => 'AppPoliciesModelPolicy', Post::class => PostPolicy::class, ];
-
Menggunakan Policy di Controller:
public function update(Request $request, Post $post) { $this->authorize('update', $post); // Lanjutkan dengan proses update post }
$this->authorize('update', $post)
akan memeriksa apakah pengguna saat ini memiliki izin untuk memperbarui post ini. Jika tidak, akan dilempar exceptionAuthorizationException
.
10. Penggunaan Artisan Console: Mempercepat Pengembangan dengan Perintah CLI
Artisan adalah command-line interface (CLI) yang disediakan oleh Laravel. Artisan menyediakan banyak perintah yang berguna untuk mempercepat pengembangan aplikasi kamu.
Contoh Perintah Artisan:
php artisan make:controller NamaController
: Membuat controller baru.php artisan make:model NamaModel
: Membuat model baru.php artisan make:migration create_nama_tabel_table
: Membuat migrasi baru.php artisan migrate
: Menjalankan migrasi.php artisan db:seed
: Menjalankan seeder.php artisan route:list
: Menampilkan daftar semua route.php artisan cache:clear
: Membersihkan cache aplikasi.php artisan config:cache
: Membuat cache konfigurasi.php artisan key:generate
: Membuat kunci aplikasi.php artisan serve
: Menjalankan development server.
Membuat Perintah Artisan Sendiri:
Kamu juga dapat membuat perintah Artisan sendiri untuk mengotomatiskan tugas-tugas tertentu.
-
Membuat Perintah:
php artisan make:command SendEmails
Ini akan membuat file
app/Console/Commands/SendEmails.php
. -
Menulis Kode Perintah: Buka file
app/Console/Commands/SendEmails.php
dan tambahkan kode berikut:<?php namespace AppConsoleCommands; use IlluminateConsoleCommand; class SendEmails extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'emails:send {user?}'; /** * The console command description. * * @var string */ protected $description = 'Send emails to users'; /** * Execute the console command. * * @return int */ public function handle() { $user = $this->argument('user'); if ($user) { $this->info("Mengirim email ke user: " . $user); // Kirim email ke user tertentu } else { $this->info("Mengirim email ke semua user"); // Kirim email ke semua user } return 0; } }
Penjelasan:
protected $signature = 'emails:send {user?}';
: Mendefinisikan nama perintah dan argumennya.emails:send
adalah nama perintah, dan{user?}
adalah argumen opsional.protected $description = 'Send emails to users';
: Mendefinisikan deskripsi perintah.handle()
: Method yang akan dijalankan ketika perintah dipanggil.$this->argument('user')
: Mengambil nilai argumenuser
.$this->info()
: Menampilkan pesan ke konsol.
-
Mendaftarkan Perintah: Buka file
app/Console/Kernel.php
dan daftarkan perintah di$commands
:protected $commands = [ AppConsoleCommandsSendEmails::class, ];
-
Menjalankan Perintah:
php artisan emails:send php artisan emails:send 123 // mengirim email ke user dengan ID 123