Tutorial CRUD Laravel 9 dengan Bootstrap 5
Assalamualaikum, Pada tutorial kali ini kita akan belajar cara membuat CRUD menggunakan Laravel versi 9. Tidak ada banyak perubahan dari versi sebelumnya dalam kasus pembuatan CRUD ini. Hanya saja yang perlu kita perhatikan, dalam menggunakan Laravel 9 ini kita harus sudah upgrade versi PHP kita minimal versi 8.
- Berikut adalah tahap-tahap dalam tutorial kali ini:
- Install Laravel 9
- Konfigurasi Database
- Membuat Migrasi
- Membuat Resource Controller dan Route
- Membuat View
- Hasil Akhir
#1 Install Laravel 9
Untuk menginstall laravel 9, seperti biasa kita ketikkan perintah berikut pada terminal kita dan tunggu hingga instalasi selesai.
composer create-project --prefer-dist laravel/laravel namaprojek
#2 Konfigurasi Database
Penyiapan basis data Pertama, buat dulu basis data untuk digunakan di host lokal Anda (saya asumsikan Anda sudah bisa membuat basis data). Di sini saya menggunakan MySQL di phpMyAdmin. Setelah membuat database, buka file .env Anda dan kemudian tentukan nama, nama pengguna, dan kata sandi dari database yang dibuat.
Untuk membuat Migrasi, ketikkan perintah berikut:
php artisan make:migration create_students_table --create=students
Jika berhasil, kita akan mendapat file baru pada folder database/migrations dengan nama "2022_02_17_082500_create_students_table.php". Sekarang kita buka file berikut, dan modifikasi file tersebut menjadi seperti berikut:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('students', function (Blueprint $table) {
$table->id();
//tambahkan kode berikut
$table->string('name');
$table->string('kelas');
//tambahkan kode di atas
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('students');
}
};
Sekarang silahkan ketikkan perintah berikut:
php artisan make:migrate
#4 Membuat Resource Controller dan Route
Buat yang baru tahu route silahkan cek tutorial yang pernah saya buat Disini. Nah dengan resource route ini, kita sudah dapat route untuk membuat fungsi CRUD. Jadi tidak perlu repot-repot membuat masing-masing route untuk CRUD seperti post, get, delete, dan update.
Tapi sebelumnya kita buat controller untuk user dahulu, kita sudah punya model user, jadi cukup buat controllernya saja. Ketikkan perintah ini di controller.
php artisan make:controller StudentController --resource
ke sekarang tambahkan kode berikut pada routes/web.php
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
//tambahkan kode berikut
Route::resource('students', StudentController::class);
Pada file Controller yang kita dapat secara otomatis akan terdapat 7 fungsi berikut yang dapat kita gunakan untuk membuat operasi CRUD.
- index()
- create()
- store()
- show()
- edit()
- update()
- destroy()
Sekarang kita buka app/Http/Controllers/StudentController.php kemudian ketikkan kodenya seperti berikut ini.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class StudentController extends Controller
{
public function index()
{
$students = Student::latest()->paginate(5);
return view('students.index',compact('students'))
->with('i', (request()->input('page', 1) - 1) * 5);
}
public function create()
{
return view('students.create');
}
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'kelas' => 'required',
]);
Student::create($request->all());
return redirect()->route('students.index')
->with('success','Student created successfully.');
}
public function show(Student $student)
{
return view('students.show',compact('student'));
}
public function edit(Student $student)
{
return view('students.edit',compact('student'));
}
public function update(Request $request, Student $student)
{
$request->validate([
'name' => 'required',
'kelas' => 'required',
]);
$student->update($request->all());
return redirect()->route('students.index')
->with('success','Student updated successfully');
}
public function destroy(Student $student)
{
$student->delete();
return redirect()->route('students.index')
->with('success','Student deleted successfully');
}
}
Jangan lupa untuk setting nilai $fillable di Model Student berdasarkan data yang ingin dapat kita tambah atau edit, pada kasus ini name dan kelas.
<?php
namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
//tambahkan kode berikut
protected $fillable = [
'name', 'kelas'
];
}
#5 Membuat View
Saya asumsikan kalian sudah mengerti cara templating pada laravel menggunakan blade. Pertama buat folder students pada resources/views. Terakhir buat file-file berikut ini.
- layout.blade.php
- index.blade.php
- create.blade.php
- edit.blade.php
- show.blade.php
Kemudian ketikkan kode berikut pada masing-masing file.
layout.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Laravel 9 CRUD School Application</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container">
@yield('content')
</div>
</body>
</html>
index.blade.php
@extends('students.layout')
@section('content')
<div class="row mt-5">
<div class="col-lg-12 margin-tb">
<div class="float-start">
<h2>Laravel 9 CRUD School Application</h2>
</div>
<div class="float-end">
<a class="btn btn-success" href="{{ route('students.create') }}"> Create New student</a>
</div>
</div>
</div>
@if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
@endif
<table class="table table-bordered">
<tr>
<th>No</th>
<th>Name</th>
<th>Kelas</th>
<th width="280px">Action</th>
</tr>
@foreach ($students as $student)
<tr>
<td>{{ ++$i }}</td>
<td>{{ $student->name }}</td>
<td>{{ $student->kelas }}</td>
<td>
<form action="{{ route('students.destroy',$student->id) }}" method="POST">
<a class="btn btn-info" href="{{ route('students.show',$student->id) }}">Show</a>
<a class="btn btn-primary" href="{{ route('students.edit',$student->id) }}">Edit</a>
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger">Delete</button>
</form>
</td>
</tr>
@endforeach
</table>
<div class="row text-center">
{!! $students->links() !!}
</div>
@endsection
create.blade.php
@extends('students.layout')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div>
<h2>Add New Student</h2>
</div>
<div>
<a class="btn btn-primary" href="{{ route('students.index') }}"> Back</a>
</div>
</div>
</div>
@if ($errors->any())
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('students.store') }}" method="POST">
@csrf
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Name:</strong>
<input type="text" name="name" class="form-control" placeholder="Name">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Kelas:</strong>
<input class="form-control" name="kelas" placeholder="Kelas"></input>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-center mt-3">
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>
</form>
@endsection
edit.blade.php
@extends('students.layout')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div>
<h2>Edit student</h2>
</div>
<div>
<a class="btn btn-primary" href="{{ route('students.index') }}"> Back</a>
</div>
</div>
</div>
@if ($errors->any())
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('students.update',$student->id) }}" method="POST">
@csrf
@method('PUT')
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Name:</strong>
<input type="text" name="name" value="{{ $student->name }}" class="form-control" placeholder="Name">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Kelas:</strong>
<input class="form-control" name="kelas" placeholder="Kelas" value="{{ $student->kelas }}">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-center mt-3">
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>
</form>
@endsection
show.blade.php
@extends('students.layout')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div>
<h2> Show student</h2>
</div>
<div>
<a class="btn btn-primary" href="{{ route('students.index') }}"> Back</a>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Name:</strong>
{{ $student->name }}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Kelas:</strong>
{{ $student->kelas }}
</div>
</div>
</div>
@endsection
#6 Hasil Akhir
Untuk menjalankan projek, ketikkan ini pada command-line.
php artisan serve
Akses dengan url localhost:8000/students
Sekian tutorial kali ini, semoga bermanfaat
Post a Comment