Kali ini kita akan membuat sebuah method didalam sebuah model dengan memanfaatkan fitur-fitur bawaan dari model. Untuk lebih jelas silahkan pelajari terlebih dahulu tentang model pada artikel Memahami Model Pada CodeIgniter 4
Sekarang kita akan menampilkan detail pada data buku yang sudah kita buat namun dengan menggunakan slug yang kita buat. Langkah awal silahkan modifikasi file Routes.php lalu tambahkan route baru seperti berikut :
//jika ada yang mengkases /buku/lalu-apapun , lalu kita arahkan ke controller Buku methodnya detail lalu kirimkan ke segment
$routes->get('/buku/(:segment)', 'Buku::detail/$1');
Setelah itu pada controller Buku.php silahkan tambahkan method detail seperti berikut
public function detail($slug)
{
echo $slug;
}
Kemudian arahkan tombol detail pada folder View->Buku index.php sepert code berikut
<td>
<a href="/buku/<?= $b['slug']; ?>" class="btn btn-success">Detail</a>
</td>
Maka tampilnya akan seperti gambar dibawah ini :
Selanjutnya kita akan membuat sebuah method didalam Model BukuModel.php, seperti berikut ini :
class BukuModel extends Model
{
protected $table = 'buku';
protected $useTimestamps = true;
public function getBuku($slug = false)
{
//jika tidak ada slug maka tampilkan semua
if ($slug == false) {
return $this->findAll();
}
//jika ada slug maka tampilkan data pertama
return $this->where(['slug' => $slug])->first();
}
}
Setelah itu perbaiki controller Buku.php seperti berikut ini :
<?php
namespace App\Controllers;
use App\Models\BukuModel;
class Buku extends BaseController
{
protected $BukuModel;
public function __construct()
{
$this->BukuModel = new BukuModel();
}
public function index()
{
//$buku = $this->BukuModel->findAll();
$data = [
'title' => 'Daftar Buku',
'buku' => $this->BukuModel->getBuku()
];
echo view('template/header', $data);
return view('buku/index', $data);
echo view('template/footer');
}
public function detail($slug)
{
$$data = [
'title' => 'Detail Buku',
'buku' => $this->BukuModel->getBuku($slug)
];
echo view('template/header', $data);
return view('buku/detail', $data);
echo view('template/footer');
}
}
Setelah itu kita akan membuat sebuah file detail.php didalam View pada folder buku seperti berikut ini :
<div class="container">
<div class="row">
<div class="col">
<h1>Detail Buku</h1>
<div class="card mb-3" style="max-width: 540px;">
<div class="row g-0">
<div class="col-md-4">
<img src="/img/<?= $buku['cover']; ?>" class="img-fluid rounded-start" alt="<?= $buku['slug']; ?>">
</div>
<div class="col-md-8">
<div class="card-body">
<h5 class="card-title"><?= $buku['judul']; ?></h5>
<p class="card-text"><b>Penulis : </b> <?= $buku['penulis']; ?></p>
<p class="card-text"><small class="text-muted"><b>Penerbit : </b> <?= $buku['penerbit']; ?></small></p>
<a href="" class="btn btn-warning">Edit</a>
<a href="" class="btn btn-danger">Hapus</a>
<br>
<br>
<a href="/buku" class="">Kembali ke daftar buku</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
Maka hasilnya sebagai berikut :