CodeIgniter adalah aplikasi open source yang berupa framework dengan model MVC (Model, View, Controller) untuk membangun website dinamis dengan menggunakan PHP. CodeIgniter memudahkan developer untuk membuat aplikasi web dengan cepat dan mudah dibandingkan dengan membuatnya dari awal. CodeIgniter dirilis pertama kali pada 28 Februari 2006
Sebelum membahas lebih jauh tentang salah satu framework PHP ini, mungkin kalian ada yang masih bingung apa itu Framework, apa itu VMC (Model, View, Controller)?
Framework secara sederhana dapat diartikan kumpulan dari fungsi-fungsi/prosedur-prosedur dan class-class untuk tujuan tertentu yang sudah siap digunakan sehingga bisa lebih mempermudah dan mempercepat pekerjaan seorang pemrograman, tanpa harus membuat fungsi atau class dari awal.
Ada beberapa alasan mengapa menggunakan Framework:
• Mempercepat dan mempermudah pembangunan sebuah aplikasi web.
• Bersifat opensource : Salah satu kelebihan yang paling jelas dari CI adalah framework ini dapat digunakan dan dikembangkan secara legal.
• Relatif memudahkan dalam proses maintenance karena sudah ada pola tertentu dalam sebuah framework (dengan syarat programmer mengikuti pola standar yang ada)
• Umumnya framework menyediakan fasilitas-fasilitas yang umum dipakai sehingga kita tidak perlu membangun dari awal (misalnya validasi, ORM, pagination, multiple database, scaffolding, pengaturan session, error handling, dll
• Lebih bebas dalam pengembangan jika dibandingkan CMS
Sekarang masuk ke pengertian VMC (Model View Controller).
Model View Controller merupakan suatu konsep yang cukup populer dalam pembangunan aplikasi web, berawal pada bahasa pemrograman Small Talk, MVC memisahkan pengembangan aplikasi berdasarkan komponen utama yang membangun sebuah aplikasi seperti manipulasi data, user interface, dan bagian yang menjadi kontrol aplikasi. Terdapat 3 jenis komponen yang membangun suatu MVC pattern dalam suatu aplikasi yaitu :
1. View, merupakan bagian yang menangani presentation logic. Pada suatu aplikasi web bagian ini biasanya berupa file template HTML, yang diatur oleh controller. View berfungsi untuk menerima dan merepresentasikan data kepada user. Bagian ini tidak memiliki akses langsung terhadap bagian model.
2. Model, biasanya berhubungan langsung dengan database untuk memanipulasi data (insert, update, delete, search), menangani validasi dari bagian controller, namun tidak dapat berhubungan langsung dengan bagian view.
3. Controller, merupakan bagian yang mengatur hubungan antara bagian model dan bagian view, controller berfungsi untuk menerima request dan data dari user kemudian menentukan apa yang akan diproses oleh aplikasi.
Dengan menggunakan prinsip MVC suatu aplikasi dapat dikembangkan sesuai dengan kemampuan developernya, yaitu programmer yang menangani bagian model dan controller, sedangkan designer yang menangani bagian view, sehingga penggunaan arsitektur MVC dapat meningkatkan maintanability dan organisasi kode. Walaupun demikian dibutuhkan komunikasi yang baik antara programmer dan designer dalam menangani variabel-variabel yang akan ditampilkan.
Ada beberapa kelebihan CodeIgniter (CI) dibandingkan dengan Framework PHP lain,
• Performa sangat cepat : salah satu alasan tidak menggunakan framework adalah karena eksekusinya yang lebih lambat daripada PHP from the scracth, tapi Codeigniter sangat cepat bahkan mungkin bisa dibilang codeigniter merupakan framework yang paling cepat dibanding framework yang lain.
• Konfigurasi yang sangat minim (nearly zero configuration) : tentu saja untuk menyesuaikan dengan database dan keleluasaan routing tetap diizinkan melakukan konfigurasi dengan mengubah beberapa file konfigurasi seperti database.php atau autoload.php, namun untuk menggunakan codeigniter dengan setting standard, anda hanya perlu merubah sedikit saja file pada folder config.
• Banyak komunitas: dengan banyaknya komunitas CI ini, memudahkan kita untuk berinteraksi dengan yang lain, baik itu bertanya atau teknologi terbaru.
• Dokumentasi yang sangat lengkap : Setiap paket instalasi codeigniter sudah disertai user guide yang sangat bagus dan lengkap untuk dijadikan permulaan, bahasanya pun mudah dipahami.
• Dan banyak lagi yang lainnya.
Aturan Penulisan Fungsi
Karena CI menggunakan Object Oriented Programming (OOP), maka yang perlu diingat bahwa penulisan nama class utama harus menggunakan huruf besar di awal dan disimpan dengan nama yang sama ,tetapi menggunakan huruf kecil semua.
Sebagai contoh, silahkan buka file /system/application/controllers/welcome.php
class Welcome extends Controller {
function Welcome()
{
parent::Controller();
}
function index()
{
$this->load->view(’welcome_message’);
}
}
Aturan ini berlaku untuk semua file yang terkait dengan class fungsi. Sedangkan jika didalamnya terdapat fungsi-fungsi lain, boleh menggunakan huruf kecil saja atau huruf besar. Tetapi perlu diingat bahwa PHP sangat Case Sensitive, jadi berhati-hatilah dalam menggunakan nama fungsi. 4
Konfigurasi Selanjutnya, dalam folder /system/application/config/ ada beberapa file yang perlu anda
ubah supaya CI bisa berjalan dengan baik.
config.php
Isi alamat pemanggilan di browser. Dalam contoh ini alamatnya adalah
http://localhost/codeigniter
$config[’base_url’] = “http://localhost/codeigniter”;
database.php
Isi hostname, username, password dan nama database yang digunakan.
autoload.php
File ini berfungsi untuk memanggil secara otomatis fungsi-fungsi yang sudah disediakan CI atau yang anda buat tanpa harus memanggillnya dalam aplikasi anda. Dalam kasus ini, kita akan memanggil fungsi database secara otomatis sehingga setiap fungsi lain yang menbutuhkan fungsi database cukup dengan menggunakan perintah $this->db
Kira-kira seperti ini isinya :
$autoload[’libraries’] = array(’database’);
routes.php
Variabel ini digunakan untuk menentukan nama file utama yang digunakan sebagai ekeskutor utama website atau aplikasi. Contoh secara defaultnya adalah file welcome.
$route[’default_controller’] = “welcome”;
Silahkan buka folder /system/application/controllers/, pasti anda menemukan file yang bernama welcome.php. File ini yang disebut sebagai eksekutor utama dari proses secara keseluruhan. Bisa dibilang ‘index’ nyalah.
Execute
Oke…sekarang coba panggil melalui brower anda dengan alamat
http://localhost/codeigniter/ (Codeigniter hanya sebagai contoh. Anda bisa merubah
dengan nama yang anda inginkan) 5 Jika berhasil, akan tampil seperti gambar berikut ini :
REVIEW
Mengapa kita butuh framework?
Bagi anda yang belum familiar dengan framework, framework adalah sekumpulan fungsi, class, dan aturan-aturan. Berbeda dengan library yang sifatnya untuk tujuan tertentu saja, framework bersifat menyeluruh mengatur bagaimana kita membangun aplikasi.
Framework memungkinkan kita membangun aplikasi dengan lebih cepat karena sebagai developer kita akan lebih memfokuskan pada pokok permasalahan sedangkan hal-hal penunjang lainnya seperti koneksi database, form validation, GUI, dan security; umumnya telah disediakan oleh framework. Disamping itu dengan aturan-aturan yang jelas dan harus dipatuhi, aplikasi kita lebih solid, more readable, dan kolabarasi dalam tim dapat lebih mudah dilaksanakan.
Kita sebagai seorang software developer bisa dianalogikan sebagai seorang tukang bangunan. Apabila anda perhatikan, seorang tukang bangunan bisa membuat sebuah rumah. Tidak akan menjadi masalah bila hanya untuk membangun rumah dengan satu atau dua lantai. Tetapi akan menjadi masalah apabila dia mendapatkan pekerjaan untuk membangun sebuah gedung bertingkat. Permasalahan akan menjadi semakin komplek, makin banyak pekerja dan material yang dilibatkan, belum lagi dengan jadwal yang ketat.
Kita pun seperti itu. Membangun aplikasi kecil tentu tidak menjadi masalah. Namun bagaimana bagaimana apabila aplikasi kecil kita tersebut dengan makin lama makin bertambah requirementnya sejalan dengan kebutuhan user. Di sini lah peran penting sebuah framework dalam membangun aplikasi.
Framework yang ideal menurut saya
Sejak fenomena Ruby on Rails, sebuah framework untuk bahasa Ruby, yang mana mampu memberi kemudahan yang luar biasa bagi developer dalam membangun aplikasi web; tumbuh menjamur framework-framework sejenis yang mengadopsi kemampuan 6 Ruby on Rails untuk bahasa lainnya. Untuk PHP sendiri, terdapat PHP on Track, Symfony, PHPCake, CodeIgniter, dan masih banyak lainnya.
Saya telah mencoba Symfony, PHPCake, dan CodeIgniter. Symfony memiliki fasilitas paling lengkap, terdapat command line interface untuk membangun Object Relational Model (ORM), yang menterjemahkan relational database menjadi kode program; dukungan AJAX; scaffolding, yaitu membuat mekanisme CRUD (create, retrieve, update, and delete). Namun sayangnya Symfony hanya berjalan di PHP5. Sebenarnya tidak menjadi masalah, karena saat ini telah banyak web hosting yang menyediakan PHP5. Apa yang saya rasakan adalah, bahwa Symfony adalah framework yang sangat
solid. Saya sangat menyukai fasilitas ORMnya, scaffolding yang kompleks, dan tutorial dan dokumentasi yang sangat bagus dan komplit. Bagaimana tidak bagus, selain disediakan User Guide yang berisi referensi API, juga disediakan sebuah buku berisi study case pembuatan aplikasi ASKEET mulai dari desain awal sampai selesai pengkodean. Di samping itu terdapat juga tutorial yang berupa file movie, namun karena berukuran yang cukup besar, saya enggan mendownloadnya, saya merasa sudah cukup dengan manual berbentuk pdf. Secara kontras, saya juga merasakan bahwa Symfony
adalah seperti senjata kelas berat. Untuk mengoperasikannya butuh learning curve yang cukup lama. Saya juga merasakan kekuatan yang out of control, dimana ketika terjadi saya menginginkan sebuah perubahan yang agak berbeda dari tutorial yang diberikan, saya seperti tidak tahu harus kemana dan bagaimana. Saya mencoba bertahan selama 3 hari dengan berusaha membuat aplikasi sederhana, namun pada akhirnya saya putuskan untuk berhenti.
Berikutnya adalah CakePHP, framework ini juga memiliki ORM dan scaffolding seperti halnya Symfony. Terdapat juga command line interface, yang disebut sebagai baker, namun sifatnya tidak mutlak digunakan. Secara keseluruhan CakePHP memiliki kemampuan tidak jauh dari Symfony, namun sekilas lebih sederhana dan ukurannya lebih kecil, dan yang tidak kalah menarik adalah kompatibilitasnya dengan PHP4. Namun sayang, dokumentasi kurang lengkap, sehingga saya kesulitan mencari informasi lebih dalam. Untung lah CakePHP membuka channel IRC sehingga kita bisa berkonsultasi langsung dengan para pakarnya. Saya sudah mencoba menanyakan permasalahan di channel IRC yang disediakan. Saya mendapatkan respon yang memuaskan dari pakarnya (developer CakePHP) sehingga permasalahn saya saat itu dapat diatasi. Namun di kesempatan lain, saya tidak mendapat respon sama sekali, saya mencari orang yang telah membantu saya sebelumnya, tetapi sepertinya dia tidak online. Saya merasa CakePHP tidak bisa memberikan apa yang saya inginkan, meski pun saya telah mencoba tutorial dan membaca panduan lainnya, saya tetap tidak besa melakukan apa-apa yang saya inginkan, atau bisa dibilang saya kebingungan, seperti halnya pada saat mencoba Symfony. 7 CodeIgniter, framework ini sebelumnya tidak masuk daftar yang akan saya coba. Hal ini dikarenakan oleh fiturnya yang jauh lebih sedikit dibandingkan Symfony dan CakePHP. Tidak ada ORM, scaffolding sangat sederhana, tidak ada AJAX, tidak ada user authentication. Lalu apa yang saya bisa harapkan darinya? Bermula dari membaca berbagai review php framework di blog lain, mereka mengatakan bahwa CodeIgniter memiliki kinerja yang lebih bagus daripada Symfony maupun CakePHP, dikarenakan oleh library yang di-load oleh framework lebih sedikit. Setelah saya mencobanya, memang framework ini terasa beda. Terasa lebih ringan dan lebih bebas. Meskipun CodeIgniter juga menggunakan design pattern MVC, namun tidak lah mutlak untuk menggunakan M (model). Jadi saya bisa dengan bebas menggunakan style yang saya sukai. Sajian dokumentasinya cukup lengkap, meskipun tidak selengkap Symfony, namun sangat memadai. Saya bisa melakukan ini itu setelah saya membaca panduan dionline manual. Sangat menyenangkan, dimana Symfony dan CakePHP tidak bisa memberikannya untuk saya. Meskipun memiliki kemampuan yang dibawah framework lainnya, namun CodeIgniter sangat mudah untuk dipelajari. Mungkin ini lah yang dimaksud dengan framework lightweight. Mudah dan sangat ringan, namun tidak memiliki fasilitas sebanyak framework lainnya. Ketika saya amati forum dan halaman wiki, komunitas CodeIgniter memberikan solusi untuk permasalahan seperti User Authentication dan Ajax. Sepertinya memang pembuat CodeIgniter sengaja memberikan kebebasan kepada usernya untuk mengembangkan sendiri sesuai dengan kebutuhan masing-masing yang berbeda, sedangkan CodeIgniter bertanggungjawab terhadap tugastugas lain yang lebih utama. Bagi saya CodeIgniter menarik, mudah dipelajari, dan sangat solid untuk membangun aplikasi yang besar. Peraturan-peraturan dan library yang disediakannya tidak membatasi saya untuk tetap menggunkan style pemrograman yang saya sukai. Ini adalah point penting. Siapa mengatur siapa, programer mengatur program atau program mengatur programer?
Pengenalan Arsitektur Model-View-Controller
Arsitektur Model-View-Controller adalah sebuah pola yang terbukti membangun proyek secara lebih efektif. Hal itu dilakukan dengan memilah komponen antara Model, View dan Controller pada bagian – bagian dalam proyek.
Motivasi
Aplikasi apapun, bagian dalam kode yang sering mengalami perubahan adalah bagian user interface. User interface adalah bagian yang paling terlihat oleh user dan bagaimana ia berinteraksi dengan aplikasi, membuatnya menjadi titik fokus pengubahan berdasar kemudahan penggunaan.
Business-logic yang rumit pada user-interface membuat pengubahan pada user interface menjadi lebih kompleks dan mudah terjadi kesalahan. Perubahan pada satu bagian memiliki potensi keterkaitan dengan keseluruhan aplikasi.
Solusi
Pola MVC menyediakan sebuah solosi terhadap permasalahan tersebut dengan membagi aplikasi menjadi bagian – bagian tersendiri, Model, View dan Controller, memisahkan antar bagian tersebut dan membuat tata interaksi diantaranya.
Pengenalan MVC 1J.E.N.I
Diagram di atas menunjukkan 3 komponen yang terdapat dalam pola MVC dan interaksi yang terjadi.
MODEL
Pola MVC memiliki layer yang disebut dengan Model yang merepresentasikan data yang digunakan oleh aplikasi sebagaimana proses bisnis yang diasosiasikan terhadapnya. Dengan memilahnya sebagai bagian terpisah, seperti penampungan data, persistence, serta proses manipulasi, terpisah dari bagian lain aplikasi.
Terdapat beberapa kelebihan dalam pendekatan ini. Pertama, membuat detail dari data dan operasinya dapat ditempatkan pada area yang ditentukan (Model) dibanding tersebar dalam keseluruhan lingkup aplikasi. Hal ini memberikan keuntungan dalam proses maintenance aplikasi.
Kedua, dengan pemisahan total antara data dengan implementasi interface, komponen model dapat digunakan kembali oleh aplikasi lain yang memiliki kegunaan yang hampir sama.
VIEW
Layer ini mengandung keseluruhan detail dari implementasi user interface. Disini, komponen grafis menyediakan representasi proses internal aplikasi dan menuntun alur interaksi user terhadap aplikasi. Tidak ada layer lain yang berinteraksi dengan user, hanya View.
Pengenalan MVC 2J.E.N.I
Penggunaan layer View memiliki beberapa kelebihan : Pertama, memudahkan pengabungan divisi desain dalam development team. Divisi desain dapat berkonsentrasi pada style, look & feel, dan sebagainya, dalam aplikasi tanpa harus memperhatikan lebih pada detail yang lain. Dan juga, memiliki layer View yang terpisah memungkinkan ketersediaan multiple interface dalam aplikasi. Jika inti dari aplikasi terletak pada bagian lain (dalam Model), multiple interfaces dapat dibuat (Swing, Web, Console), secara keseluruhan memiliki tampilan yang berbeda namun mengeksekusi komponen Model sesuai fungsionalitas yang diharapkan.
CONTROLLER
Terakhir, arsitektur MVC memiliki layer Controller. Layer ini menyediakan detail alur program dan transisi layer, dan juga bertanggungjawab akan penampungan events yang dibuat oleh user dari View dan melakukan update terhadap komponen Model menggunakan data yang dimasukkan oleh user.
Kelebihan dalam penggunaan layer Controller secara terpisah : Pertama, dengan menggunakan komponen terpisah untuk menampung detail dari transisi layer, komponen view dapat didesain tanpa harus memperhatikan bagian lain secara berlebih. Hal ini memudahkan team pengembang multiple interface bekerja secara terpisah dari yang lain secara simultan. Interaksi antar komponen View terabstraksi dalam Controller.
Kedua, dengan menggunakan layer terpisah yang melakukan update terhadap komponen Model, detail tersebut dihapus dari layer presentasi. Layer presentasi kembali pada fungsi utamanya untuk menampilkan data kepada user. Detail tentang bagaimana data dari user mengubah ketetapan aplikasi disembunyikan oleh Controller. Hal ini memisahkan dengan jelas antara presentation logic dengan business logic.
Tidak dapat disimpulkan bahwa pola MVC hadir dengan kelebihan – kelebihan tanpa ada efek samping. Pembagian aplikasi dalam 3 bagian terpisah meningkatkan kompleksivitas. Pada aplikasi kecil yang tidak membutuhkan loose coupling pada Model, hal ini dapat menjadi blok penghalang dalam penggunaan pola ini. Bagaimanapun, yang terbaik adalah untuk meyakini bahwa sebuah aplikasi umumnya dimulai dari aplikasi sederhana, dan berkembang menjadi sistem yang kompleks., sehingga factor loose coupling harus selalu diutamakan dan diperhatikan.