Pertemuan 11: Laravel 2 (Migration Seeder Factory) & Authentication
Pemrograman Website — diselenggarakan oleh Fakultas Teknologi Informasi dan Sains Data Universitas Sebelas Maret, Semester Genap 2024/2025
1. Migration
Migration adalah fitur Laravel yang memungkinkan kita mengelola versi skema database menggunakan kode PHP. Setiap perubahan struktur database ditulis dalam file migration, sehingga pengelolaan skema database menjadi lebih terstruktur, terdokumentasi, dan bisa dikontrol versi-nya.
Kelebihan Menggunakan Migration
- Menghindari inkonsistensi struktur database.
- Dapat digunakan oleh tim secara kolaboratif.
- Bisa rollback jika ada kesalahan pada struktur.
- Dapat diatur menggunakan version control seperti Git.
Perintah Dasar
php artisan make:migration create_users_table
php artisan migrate
php artisan migrate:rollback
Contoh Migration
// database/migrations/xxxx_xx_xx_create_products_table.php
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->double('price');
$table->timestamps();
});
}
2. Seeder & Factory
Pengertian
- Seeder: Digunakan untuk mengisi data awal atau data dummy ke dalam tabel database. Cocok untuk testing dan pengembangan.
- Factory: Menghasilkan data dummy secara otomatis dengan atribut acak berdasarkan template yang ditentukan, menggunakan library Faker.
Kelebihan
- Menghemat waktu input manual saat testing.
- Dapat mengisi database dalam jumlah besar.
- Dapat digunakan pada CI/CD pipeline.
Langkah-langkah
a. Membuat Factory
php artisan make:factory ProductFactory --model=Product
// database/factories/ProductFactory.php
public function definition()
{
return [
'name' => $this->faker->word(),
'price' => $this->faker->randomFloat(2, 1000, 100000),
];
}
b. Membuat Seeder
php artisan make:seeder ProductSeeder
// database/seeders/ProductSeeder.php
public function run()
{
\App\Models\Product::factory(10)->create();
}
c. Menjalankan Seeder
php artisan db:seed --class=ProductSeeder
d. Menjalankan Semua Seeder
Tambahkan ke DatabaseSeeder.php
:
public function run()
{
$this->call(ProductSeeder::class);
}
Jalankan:
php artisan db:seed
3. Authentication
A. Auth Secara Manual (Vanilla Laravel)
Laravel dapat menangani otentikasi secara manual tanpa menggunakan starter kit seperti Breeze atau UI. Berikut adalah langkah-langkahnya:
1. Migration dan Model User
Pastikan tabel users
sudah tersedia dari default Laravel.
// users table migration (default)
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
2. Routing
Tambahkan route login, register, dan logout:
// routes/web.php
use App\Http\Controllers\AuthController;
Route::get('/register', [AuthController::class, 'showRegisterForm']);
Route::post('/register', [AuthController::class, 'register']);
Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login');
Route::post('/login', [AuthController::class, 'login']);
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
3. Controller
php artisan make:controller AuthController
// app/Http/Controllers/AuthController.php
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class AuthController extends Controller
{
public function showRegisterForm()
{
return view('auth.register');
}
public function register(Request $request)
{
$request->validate([
'name' => 'required',
'email' => 'required|email|unique:users',
'password' => 'required|min:6|confirmed',
]);
User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
return redirect('/login');
}
public function showLoginForm()
{
return view('auth.login');
}
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
$request->session()->regenerate();
return redirect()->intended('/dashboard');
}
return back()->withErrors([
'email' => 'Login gagal. Periksa kembali email dan password.',
]);
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/login');
}
}
4. View Blade
Buat folder resources/views/auth
dan tambahkan dua file:
login.blade.php
register.blade.php
Isi sederhana:
<!-- resources/views/auth/login.blade.php -->
<form method="POST" action="/login">
@csrf
<input name="email" type="email" placeholder="Email">
<input name="password" type="password" placeholder="Password">
<button type="submit">Login</button>
</form>
<!-- resources/views/auth/register.blade.php -->
<form method="POST" action="/register">
@csrf
<input name="name" type="text" placeholder="Name">
<input name="email" type="email" placeholder="Email">
<input name="password" type="password" placeholder="Password">
<input name="password_confirmation" type="password" placeholder="Confirm Password">
<button type="submit">Register</button>
</form>
5. Proteksi Halaman
Gunakan middleware auth
:
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware('auth');
B. Starter Kit (Breeze, UI, Jetstream)
Laravel juga menyediakan starter kit otentikasi yang siap pakai untuk mempercepat pengembangan.
Laravel Breeze
Instalasi
composer require laravel/breeze --dev
php artisan breeze:install
npm install && npm run dev
php artisan migrate
Jalankan Server
php artisan serve
Akses:
http://localhost:8000/register
http://localhost:8000/login
Laravel UI (Alternatif)
composer require laravel/ui
php artisan ui bootstrap --auth
npm install && npm run dev
php artisan migrate