Pada series belajar laravel sebelumnya, kita telah belajar tentang route dan view di Laravel. Pada lanjutan series belajar Laravel bagian 3, kita akan belajar lebih dalam mengenai konsep MVC (Model-View-Controller) di Laravel.
Apa itu konsep MVC?
Sebagaimana kebanyakan bahasa pemrograman lainnya, Laravel juga menggunakan konsep MVC untuk membangun program dan aplikasi. Konsep MVC digunakan untuk memisahkan logika program aplikasi menjadi tiga komponen utama, yakni:
Model
Model adalah bagian yang bertugas untuk mengelola data dari database. Pada bagian ini, berisi logika pengolahan data seperti mengambil, menyimpan, merubah, menghapus data.
Laravel menggunakan Eloquent ORM (Object-Relational Mapping) untuk memudahkan dalam berinteraksi dengan database. Model di Laravel terletak pada path directory“app/Models”. Saat Anda membuat Model baru, maka pembuatan file modelnya berada di folder tersebut.
View
View bertugas sebagai tampilan website atau aplikasi. Data yang ditampilkan oleh view bisa berupa HTML, JSON, XML.
Letak path directory view ada di “resources/views”. Di Laravel pembuatan view menggunakan blade templating engine. File view ditulis dengan format namafile.blade.php.
Controller
Controller bertugas sebagai penghubung antara Model dan View. Controller mendapatkan input dari pengguna melalui HTTP Request, selanjutnya memproses input yang diterima tersebut dengan berinteraksi dengan Model. Terakhir mengembalikan hasilnya pada View untuk ditampilkan ke pengguna.
Controller berada di path directory “app/Http/Controllers”. Controller yang akan berperan pada logika aplikasi dengan berinteraksi dengan Model dan View.
Arsitektur MVC memisahkan antara logika, tampilan, serta kontroler sehingga membuat mudah dalam pemeliharaan dan pengembangan aplikasi secara menyeluruh.
Contoh Sederhana MVC di Laravel
Selanjutnya, kita akan mempraktikan cara membuat code sederhana menggunakan konsep MVC di Laravel.
Step 1. Membuat Database di phpMyAdmin
Silakan Anda membuat database di locahost melalui PHPMyAdmin. Sebagai contoh, kami membuat database dengan nama dbrw-laraveltutorial.
Step 2. Isi Sample Data
Setelah itu, silakan inputkan script berikut dikolom SQL, untuk membuat table dan mengisi sample datanya.
Isi data berikut.
-- Membuat database
CREATE DATABASE IF NOT EXISTS sekolah;
-- Menggunakan database yang telah dibuat
USE sekolah;
-- Membuat tabel siswa
CREATE TABLE IF NOT EXISTS siswa (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
alamat VARCHAR(255),
tanggal_lahir DATE
);
-- Menambahkan beberapa contoh data siswa
INSERT INTO siswa (nama, alamat, tanggal_lahir) VALUES
('Andi Pratama', 'Jl. Jogja No. 10, Jakarta', '2005-01-15'),
('Benny Santoso', 'Jl. Kuningan No. 5, Batang', '2004-11-20'),
('Cici Dewi', 'Jl. Sukajadi No. 12, Solo', '2005-05-30'),
('Dedi Permadi', 'Jl. Cempaka No. 8, Jakarta', '2004-07-25'),
('Eni Putri', 'Jl. Melati No. 7, Yogyakarta', '2005-09-10');
Step 3. Sesuaikan Config Database
Lakukan pengaturan config database di file .env.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=dbrw-laraveltutorial
DB_USERNAME=root
DB_PASSWORD=
Keterangan:
- DB_Database adalah nama database yang telah Anda buat.
- DB_Username adalah nama user databasenya. Secara default berisi root.
- DB_Password adalah password databasenya. Biasanya dilocalhost kosong
Step 4. Model
Membuat model “Siswa” yang mana model ini akan berinterakhir dengan tabel “siswa” yang ada di database. Perintah artisannya sebagai berikut.
php artisan make:model Siswa
Edit Model Siswa.php yang letak model siswa berada di direktori “app/Models/Siswa.php”.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Siswa extends Model
{
use HasFactory;
// Nama tabel di database
protected $table = 'siswa';
// Kolom-kolom yang dapat diisi secara massal
protected $fillable = ['nama', 'alamat'];
}
Step 5. Controller
Selanjutnya membuat SiswaController untuk mengambil data yang ada di Model, kemudian mengirimkannya ke View. Membuat Controller menggunakan perintah artisan berikut.
php artisan make:controller SiswaController
Letak filenya ada di app/Http/Controllers/SiswaController.php. Isi file SiswaController.php menggunakan code berikut.
<?php
namespace App\Http\Controllers;
use App\Models\Siswa;
use Illuminate\Http\Request;
class SiswaController extends Controller
{
public function index()
{
// Mengambil semua data siswa
$siswa = Siswa::all();
// Mengirim data ke view
return view('siswa.index', ['siswa' => $siswa]);
}
}
Step 6. View
Membuat view untuk menampilkan data Siswa, letak filenya ada di resources/views/siswa/index.blade.php. Pastikan setelah folder Views Anda membuat folder siswa. Nantinya letak file index.blade.php berada didalam folder siswa.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Data Siswa</title>
</head>
<body>
<h1>Data Siswa</h1>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>Nama</th>
<th>Alamat</th>
</tr>
</thead>
<tbody>
@foreach($siswa as $s)
<tr>
<td>{{ $s->id }}</td>
<td>{{ $s->nama }}</td>
<td>{{ $s->alamat }}</td>
</tr>
@endforeach
</tbody>
</table>
</body>
</html>
Step 7. Routing
Sesuaikan Route yang berada di routes/web.php untuk mengakses controller SiswaController
use App\Http\Controllers\SiswaController;
// Route untuk menampilkan data siswa
Route::get('/siswa', [SiswaController::class, 'index']);
Step 8. Jalankan Aplikasi Laravel
Untuk menjalankan aplikasi Laravel di localhost menggunakan perintah artisan.
php artisan serve
Akses aplikasi di browser dengan URL: http://localhost:8000/siswa
Kesimpulan
MVC adalah singkatan dari Model, View, dan Controller, yaitu arsitektur yang digunakan untuk memisahkan logika aplikasi menjadi 3 bagian. Model bertanggung jawab atas pengelolaan data dan aturan, View mengatur tampilan antarmuka pengguna, sedangkan Controller berfungsi menghubungkan keduanya serta menangani aliran data dan logika aplikasi.
Demikian series belajar Laravel bagian 3 yang menjelaskan tentang arsitektur MVC di Laravel. Simak series lanjutan kami di artikel berikutnya.