Skip Loading

[Codeigniter] Aplikasi modular [HMVC] di codeigniter

Framework MVC PHP favorit saya hingga kini masihlah Codeigniter, yang menurut saya mudah dipelajari, ringan, mudah dimodifikasi dan mempunyai dokumentasi yang baik. Saat ini Codeigniter telah mempunyai versi 3.0. Namun Codeigniter secara default tidak mendukung HMVC (Hierarchical Model View Controller) alias tidak mempunyai kemampuan modular. Padahal untuk membuat aplikasi yang kompleks seperti CMS, dukungan pada HMVC akan sangat menghemat waktu pengembangan, karena kita dapat membuat modul yang terdiri dari controller, model dan view dan dapat dengan mudah diintegrasikan dalam aplikasi yang pernah kita buat.

Perbedaan utama antara MVC dan HMVC adalah, bila pada MVC, kita memisahkan controller, model dan view dalam masing-masing folder, maka pada HMVC dalam setiap modul terdapat folder controller, model dan view. Jadi misalkan kita memiliki controller blog dan contact, maka pada MVC, strukturnya adalah sbb:

--Controllers
  -Blog.php
  -Contact.php
--Models
  -Blog_model.php
  -Contact_model.php
--Views
  -singleblog.php
  -blogs.php
  -contact.php

Sedangan pada HMVC, strukturnya adalah sbb:

---Blog
  --Controllers
    -Blog.php
  --Models
    -Blog_model.php
  --Views
    -singleblog.php
    -blogs.php
---Contact
  --Controllers
    -contact.php
  --Models
    -Contact_model.php
  --Views
   -contact.php

Apabila kita memiliki aplikasi yang cukup kompleks dengan banyak controller, maka pendekatan HMVC akan sangat membantu organisasi project, yang pada akhirnya mengurangi resiko bugs akibat salah edit/replace file dan juga menghemat waktu pengerjaan.

Karena sifat codeigniter yang sederhana, maka implementasi HMVC pada codeigniter juga sangat mudah. Untuk Codeigniter 3.0, library yang kompatibel adalah dari wirezdesign, yang dapat di download di: https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/get/codeigniter-3.x.zip. Perhatikan bahwa untuk Codeigniter 3, gunakan branch CI 3.. jangan salah download, karena yang utama dalah untuk CI2.

Setelah didownload dan kita extract, maka akan ada folder core dan third_party. Copy isi masing-masing folder ke folder application/core dan application/third_party. (Sebaiknya gunakan codeigniter yang masih clean untuk mencoba). Done.. Codeigniter anda sudah mendukung HMVC.. Kemudian untuk membuat modul, caranya adalah sbb:

- Buat folder modules didalam folder application.

Apabila kita ingin letak folder modules di tempat lain taua mengguakan nama lain, edit file config.php dan tambahkan baris berikut:

$config['modules_locations'] = array( APPPATH.'modules/' => '../modules/')

Misalkan kita ingin letaknya sejajar dengan folder application, maka confignya menjadi:

$config['modules_locations'] = array( APPPATH.'modules/' => '../../modules/')

Note: Karena value dari config['modules_locations'] adalah array, maka kita dapat saja meletakkan modul-modul di lebih dari satu folder, misalkan pada folder basic dan extended..

- Dalam folder modules, buat folder sesuai nama modul, lalu dalam folder itu buat lagi folder Controllers, Models, Libraries, Helpers dan Views.

- Buat file Controller sesuai nama modul dalam folder Controllers
  misalnya Blog/Controllers/Blog.php (Ingat , untuk CI 3.0, nama file controller harus dimulai dengan huruf kapital.
  Untuk menggunakan fungsi HMVC secara penuh spt menggunkan Modules::run (menjalankan controller dari controller lain), maka Controller yang berada dalam modul ini harus turunan dari MX_Controller, contohnya:

<?php     
class Xyz extends MX_Controller 
{
    //untuk memanggil model/helper/library dari modul itu sendiri atau dari folder models 
    //di application perintahnya:
     $this->load->model('xyz_m');
     //untuk memanggil model/helper/library dari modul lain perintahnya:
     $this->load->model('category/category_m');

    public function index(){
       echo "index";
    }
    public function test(){
       echo "test";
    }
}

Namun apabila hanya ingin memisahkan modul-modul dalam folder saja (modules separation), spt dalam banyak kasus, maka Controller cukup extend dari CI_Controller saja.

Apabila kita ingin autoload model/helper/library dari config autoload.php, maka perintahya sbb:

$autoload['libraries'] = array("database","settings/options"); 
//library options dari modul settings

- Untuk mengakses modul urlnya adalah sbb:

base_url/namamodul/namacontroller/namafungsi, misalnya http://localhost/mysite/index.php/xyz/xyz/ atau http://localhost/mysite/index.php/xyz/xyz/test

HMVC dan library form_validation

Apabila kita menggunakan library form validation dalam modul hmvc, maka form_validation tidak akan berkerja. Untuk mengatasinya maka buat file MY_form_validation.php di folder libraries. Isi filenya (hanya satu baris saja):

<?php
/** application/libraries/MY_Form_validation **/ 
class MY_Form_validation extends CI_Form_validation 
{
    public $CI;
}

lalu untuk menggunakan form validation di controller:

<?php
class Xyz extends MX_Controller 
{
    function __construct()
    {
        parent::__construct();

        $this->load->library('form_validation');
        $this->form_validation->CI =& $this; //tambahkan baris ini sebelum menjalankan form_validation
    }
}

selamat mencoba..

www.paulussetyo.com

Related Posts
Comments ( 03 )
  1. kutak katik
    Fri, 22 April 2016 18:26

    saya punya helper buatan saya sendiri, saya taruh file helpernya di : .../modules/admin/helpers/special_helper.php, tapi saya load di controller berextends mx_controller $this->load->helper('admin/special_helper); tidak bisa mas, bagaimna ya solusinya?

  2. Riyanto
    Tue, 12 April 2016 11:03

    Apakah didalam satu modul bisa Terdiri dari banyak controller? Karena Nama foldernya adalah "controllers".

    • Author
      Tue, 12 April 2016 11:35

      Bisa saja.. misalkan satu controller untuk admin dan satu lagi controller untuk public

Add Comment

Your email address will not be published. Required fields are marked *