Kamis, 24 November 2011

Model View Controller (MVC) Codeigniter

Codeigniter ditulis oleh Rick Ellis, seorang musisi rock yang beralih profesi menjadi pemrogram. MVC dibuat untuk memisahkan antara logika aplikasi dan tampilan. Menggunakan pola ini diharapkan dapat meminimalisasi penulisan perintah, sehingga resiko terjadinya bug juga minimal, serta meningkatkan efisiensi pembangunan aplikasi.
Saya asumsikan anda bukan orang yang awam-awam banget codeigniter hehehe. Saya menulis artikel ini untuk memantapkan pemahaman konsep MVC CI, dan saya ingin berbagi dengan anda jika anda sedang dalam kasus yang sama.

Gambaran penerapan arsitektur MVC dalam codeigniter yaitu:
  • Controller merupakan pengatur utama hubungan antara model, view dan juga sumber daya lain yang tersedia (elemen framework CI)
    (direktorinya di '../application/controllers/')
  • View merupakan tempat untuk meletakkan apa yang akan ditampilkan di browser. Sebuah berkas view umumnya berisi kode bahasa pemrogramman sisi klien (client-side-scripting)
    (direktorinya di '../application/views/')
  • Model bertanggung jawab untuk melakukan pengelolaan data dalam basis data. Di dalamnya biasa dituliskan perintah SELECT, UPDATE, DELETE dan INSERT.
    (direktorinya di '../application/models/')

lets go kita mulai dengan study case menampilkan artikel, buat database dengan nama bioskop (atau terserah anda yang penting menyesuaikan di ../application/config/database.php) buat table baru dengan nama movie:

CREATE TABLE movie ( 
mid int(11) NOT NULL AUTO_INCREMENT, 
mtitle VARCHAR (80) NOT NULL, 
mtitle_identifier VARCHAR (80) NOT NULL, 
msinopsis TEXT, 
mdirectors VARCHAR(200) DEFAULT NULL, 
mauthors VARCHAR(200) DEFAULT NULL, 
mrelease_date DATE, 
mproducers VARCHAR(200) DEFAULT NULL, 
mdistributors VARCHAR(200) DEFAULT NULL, 
msite VARCHAR(50) DEFAULT NULL, 
mcategory TINYINT(4) DEFAULT NULL, 
PRIMARY KEY (mid), 
UNIQUE KEY identifier (mtitle_identifier) 
) ENGINE=MyIsam DEFAULT charset=UTF8; 

buat file baru pada direktori controller dengan nama movie.php

/**
* Class Movie
* @package       Controllers
* @access        Public
* @dindasgmwty      
*/

class movie extends CI_Controller{
    var $_public_view;
    
//konstrusisi kelas sesuai cara php5
    public function __construct()
    {
        parent::__constuct();//inherit dari parent
        //$this->load->database();//memuat library basis data, sesuai konfigurasi
       
        $this->load->model('basic_model','bmodel');
    }
   
public function index($offset=NULL)
    { 
         //data yang akan digunakan di view
        $data = array('query' =>; $this->bmodel->get_movie_list(),
                        'page_title' => 'Daftar Film'
                        );
       
        $this->load->view('movie_list',$data);      
    }
}

fungsi index merupakan fungsi standar yang sering dijumpai pada CI. jika suatu controller dipanggil tanpa menyertakan nama fungsi tertentu, dengan cerdas sistem CI akan memanfaatkan fungsi index() ini.
Pada controller movie kita menuliskan
$this->load->view('movie_list',$data); 
parameter pertama diisi dengan nilai 'movie_list', Untuk itu berkas view yang akan dibuat dinamakan movie_list.php dan disimpan dalam direktori view.
<?php
echo $page_title;
echo $query;
?>
untuk mengatur fungsi-fungsi yang kita gunakan pada controller movie, kita akan membuat sebuah model bernama basic_model.php pada direktori model.
Perlu diketahui bahwa keberadaan model dalam CI tidak dipersyaratkan dengan mutlak. Kueri dapat dilakukan melalui controller. Namun dalam hal ini, kita akan menggunakan model, supaya lebih mantap :p
 
/**
* Basic_model
* menyediakan fungsi fungsi dasar yang
* berhubungan dengan manipulasi basis data
* @dindasgmwty
*/
class basic_model extends CI_Model{
    var $output_table = '';
   
   
    public function __construct()
    {
        parent::_construct();
        $this->load->database();
        $this->load->library('table');
        $this->load->helper(array('array','text'));
 
    }
    //fungsi dasar untuk mengambil data
    protected function make_query($fields='', $table='', $where=array(), $limit=NULL,$offset='', $order=array('field'=>NULL,'sort'=>'ASC'))
            {
                $this->db->select($fields);
                if (!is_null($order['field']))
                {
                    $this->db->order_by($order['field'],$order['sort']);
                }
                return $this->db->get_where($table,$where,$limit,$offset);
            }
   
    //menampilkan teble daftar film yang terekam
    public function get_movie_list($limit=NULL, $offset='', $order=array('field'=>'mrelease_date','sort'=>'DESC'))
    {
        
        $query = $this->make_query('mtitle,
                                    mtitle_identifier,
                                    msinopsis,
                                    mdirectors,
                                    mauthors,
                                    mrelease_date',
                                    'movie',
                                    array(),
                                    $limit,
                                    $offset,
                                    $order);
 if($query->num_rows() > 0){
            foreach ($query->result() as $value)
            {
                
$this->table->add_row(
strtoupper($value->mtitle));
     $this->table->add_row(ascii_to_entities($value->msinopsis));
$this->table->add_row(
   'Sutradara : '.($value->mdirectors).
   ' | Penulis Naskah : '.($value->mauthors).
      ' | Tanggal Rilis : '.strftime ('%d/%b/%Y',                          strtotime($value->mrelease_date)));
                
                
 $this->output_table .= $this->table->generate();
 $this->output_table .= '
';
 $this->table->clear();
                
            }
            return $this->output_table;
        }
        else
        {
            return FALSE;
        }
        
}

}

terdapat fungsi make_query() ini artinya kita memanfaatkan kelas Active Record. Kelas Active Record merupakan perluasa dari kelas Dindabase, eh. database. makanya penulisaannya seperti ini: $this->db->.... ada db nya karna dia perluasan kelas database yang sudah kita load pada konstruktor basic_model.
Nilai balikan yang dihasilkan berupa pernyataan SQL yang valid. kelas ini dibuat agar suatu kueri berjalan aman dan sederhana. sedangkan fungsi get_movie_list dibuat untuk mengambil semua data film kemudian membuat daftar film dalam bentuk HTML dan memanfaatkan fungsi make_query.

sumber:
N.W.P, Anugrah, 2010, Codeigniter: cara mudah membangun aplikasi php, Jakarta:media kita
http://codeigniter.com/user_guide/toc.html

2 komentar:

  1. hebat eh dindan nih.... ihhhhh hbatnya ai... samwan laik yuuuu

    BalasHapus
  2. wew.....sangar mainannya CI...ckckckkckc...ajarin donk :D

    BalasHapus

Berkenalan dengan MEAN Stack

“ This MEAN stack (Mongo, Express, Angular, Node) may one day surpass the simplicity of the LAMP stack (Linux, Apache, MySQL, PHP) for we...