[Tutorial] Lanjutan Konsep Model View Controller di CodeIgniter

30 July 2017 09:10:39

[Tutorial] Lanjutan Konsep Model View Controller di CodeIgniter

Di post sebelumnya Tutorial Mengenal Konsep Model View Controller di CI kita sudah belajar konsep dasar MVC, beserta contoh penerapan sederhana di Controller dengan Viewnya saja. Kali ini kita akan mencoba mempelajari konsep MVC secara keseluruhan, dan teknik pengiriman data dari masing-masing komponen MVC tersebut.

Seperti di penjelasan post sebelumnya, Controller merupakan komponen inti dalam konsep MVC. Tanpa model dan view pun sebenarnya controller bisa berjalan sendiri, hanya saja kesannya nggak rapi. Sebagai inti, Controller bertugas membuat sebuah halaman. Ketika kita membuat controller baru, atau membuat method baru di class controller,, maka kita juga sudah menambah sebuah halaman baru dengan URL tertentu. 

Misalkan, kita buat sebuah file controller baru di application/controllers/ dengan nama file Data.php. Isi file tersebut dengan format yang sama seperti Home.php, hanya saja jangan lupa mengganti nama Classnya sesuai dengan nama file..

<?php
defined('BASEPATH') OR exit(); //menghindari bypass akses secara langsung

//nama class harus sama dengan nama file.
class Data extends CI_Controller{
	//karena ini controller, class harus di extend ke CI_Controller agar dapat berjalan

	public function index(){
		//index() merupakan fungsi yang akan di load paling pertama ketika controller ini dipanggil.
		$this->load->view("halaman_utama");
	}

	//nanti mau diisi lagi dibawah sini

}

Jadi, kita baru saja membuat sebuah halaman baru dengan isi yang sama seperti halaman Home. Bagaimana cara mengaksesnya? Caranya adalah dengan mengakses URL dengan format : base_url + index.php/ + nama_controller. Karena nama controllernya adalah data, maka URLnya adalah localhost/ci_project/index.php/data

"Erm, kok bisa ada index.php nyempil di tengah2 seperti itu ya? Bisa dihilangkan nggak?" BISA! Ada tweak .htaccess yang bisa kita pakai untuk menghilangkan index.php di URL default CodeIgniter disana. Caranya, buka notepad, copy kode berikut ini : 

RewriteEngine on
RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?$1 [L,QSA]

contoh htaccess

Save dengan nama file .htaccess , dan jangan lupa Save As Typenya diubah menjadi All Files. Simpan di direktori utama project kita. Kalau sudah dilakukan, maka akses ke controller data sekarang jadi localhost/ci_project/data. Lebih bagus kan?

Nah, sekarang dalam controller data (dan berlaku untuk controller apapun) juga bisa kita masukkan method untuk menjadi halaman juga. Misalnya kita buat sebuah method baru dibawah method index() seperti ini : 

...
	public function karyawan(){
		//ceritanya ini method untuk menampilkan data karyawan
		$this->load->view("data_karyawan");
	}
...

Karena kita memanggil view data_karyawan, jangan lupa buat file data_karyawan.php juga di Views. Isinya saat ini bebas dulu deh. Nah, URL untuk mengakses method di controller ini adalah localhost/ci_project/data/karyawan . Selain itu, method di controller juga dapat kita isi variabel parameter. Nantinya bisa berguna untuk di pengolahan data. Misalnya misalnya kita buat method lagi dibawahnya seperti ini , 

 

...
	public function ideal($berat){
		//ceritanya ini method untuk mencari berat badan ideal
		$this->load->view("berat_badan");
		//jangan lupa juga buat view berat_badan.php juga
	}
...

Nah, untuk method controller seperti itu, URLnya adalah localhost/ci_project/data/ideal/xxx. Nilai "xxx" yang diisi di URL tersebut nantinya akan dianggap sebagai nilai variabel $berat yang didalam method tersebut mungkin akan diolah-olah lagi.. Nah, kalau sudah urusan olah mengolah, baru deh Model punya peran disini.. Sampai disini dulu sudah paham? Kalau sudah paham kita baru bisa lanjut ke Model..

 

 

Kalau kita sudah mengerti konsep Controller dengan cukup baik, Model sebenarnya nggak begitu sulit kok. Untuk lebih pahamnya, kita buat sebuah file model_data.php di application/models. Isi seperti ini : 

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

Class Model_data extends CI_Model{

}

Berbeda seperti controller, model nggak perlu method index() karena nggak ada halaman yg ditampilkan disini. Prinsip kerja model adalah, dipanggil untuk mengolah sesuatu, kemudian mengirim balik (return) sebuah nilai ke Controller. Untuk contoh sederhana, kita buat sebuah method untuk mengolah data berat badan.

//selipkan di class data
	public function hitung_bb($berat, $tinggi=170){
		$tinggi = $tinggi / 100; //dari cm ke meter
		$bmi = $berat / ($tinggi * $tinggi);
		if($bmi > 27)
			return "Obesitas";
		else if($bmi >= 25)
			return "Overweight";
		else if($bmi >= 18)
			return "Normal";
		else
			return "Underweight";
	}

Untuk mengakses model tersebut dari controller, kita harus me-load() nama modelnya terlebih dahulu. Setelah itu baru methodnya bisa dipanggil. Kita ubah method ideal() di controller menjadi seperti ini :

...
	public function ideal($berat){
		//memanggil model dengan nama model_data.php
		$this->load->model("model_data"); 

		//setelah diload, model bisa diakses dengan perintah
		//$this->model_data->.......

		$kirim['ideal'] = $this->model_data->hitung_bb($berat);
		$kirim['berat_input'] = $berat;

		//array $data dikirim ke view berat_badan untuk ditampilkan
		$this->load->view("berat_badan", $kirim);
	}
...

Ada beberapa hal yang harus diperhatikan disini. Pertama $this->load->model(....) digunakan untuk memanggil nama model yang akan digunakan di method controller yang bersangkutan. diisi sesuai dengan nama model yang diinginkan. Setelah diload, kita dapat menjalankan semua method di model tersebut dengan $this->nama_model->nama_method(...parameter jika ada...);

Kedua, di tengah2 saya membuat sebuah array $kirim[...]. Nama arraynya bebas, diisi dengan index unik tertentu agar bisa dikirimkan ke view. Cara mengirimkannya adalah mengirimkan variabel array tersebut di perintah $this->load->view("nama_view", $kirim). Index di variabel $kirim tersebut nantinya akan menjadi nama variabel di view yang bersangkutan. Kalau di controller kita mengirim dengan $kirim['ideal'] dan $kirim['berat_input'], maka di view diakses dengan $ideal dan $berat_input saja. Untuk membuktikannya, Tambahkan baris berikut ini di view berat_badan.php.

Ini halaman berat_badan.php
<br>
<!--$berat_input didapat dari $kirim['berat_input']-->
Berat inputan : <?=$berat_input?> kg
<br>
<!--$ideal didapat dari $kirim['ideal']-->
<!--$ideal juga sebelumnya sudah diolah di model data->berat_ideal()-->
Hasil olah model : <strong><?=$ideal?></strong>

Jika semuanya sudah berjalan dengan tepat, maka hasilnya adalah seperti ini 

 

Contoh View hasil MVC

Konsep MVC ini dapat kita kembangkan menjadi aplikasi yang lebih besar lagi, asalkan dasar-dasar penggunaan Model, View, dan Controller ini sudah kita pahami dengan baik. Di tutorial selanjutnya kita akan belajar memanfaatkan database untuk membuat aplikasi CRUD sederhana dengan konsep MVC di CodeIgniter..

 

Next : Tutorial Membuat Aplikasi CRUD Sederhana di CodeIgniter

0
0
SHARE

Contact Me