Anda di halaman 1dari 64

Tutorial Membangun Sistem Core

embuat framework PHP berbasis Model View Controller(MVC) ternyata tidak terlalu sulit.Pada

tahap ini akan dijelaskan tata cara pembuatan Controller,View dan struktur lainnya seperti Loader, Register Object dan sebagainya. Sebelum kita mulai pembuatan framework-nya, alangkah lebih baik dijelaskan terlebih dahulu apa latar belakang framework MVC. Dilihat dari sejarahnya sebenarnya konsep MVC ini sudah ada sejak lama. Konsep MVC ini pertama kali diperkenalkan oleh para peneliti XEROX PARC yang bekerja dalam pembuatan bahasa pemrograman Smalltalk sekitar tahun 1970-1980. Pada dasarnya MVC adalah sebuah metode untuk membuat sebuah aplikasi dengan memisahkan data (Model), tampilan (View) dan cara bagaimana memprosesnya (Controller). Sampai saat ini framework yang dalam aplikasi website kebanyakan berbasis arsitektur MVC, misalnya CodeIgniter, Simphony, Kohana, cakePHP dan lain sebagainya. Kebanyakan framework yang ada sekarang ini bersifat open source sehingga siapapun bisa mengembangkannya sesuai dengan kebutuhan.Gambar disamping ini menjelaskan bagaimana konsep dasar struktur framework MVC.

Sesuai dengan namanya konsep MVC terbagi menjadi tiga bagian yaitu Controller, Model dan View. Controller berfungsi sebagai sarana komunikasi (input/output) ke browser. Jadi setiap pengguna melakukan komunikasi dengan aplikasi web site pastinya pengguna tersebut berinteraksi dengan controller. Model berfungsi untuk input/output ke database. Sedangkan view adalah sekumpulan tampilan baik itu HTML, CSS, Javascript dan lain sebagainya. Dalam tulisan kali ini sengaja di buat tema "Hierachical Framework MVC", memang framework ini mendukung banyak aplikasi dalam satu framework. Jadi slogan yang diusung adalah " One Framework Many application". Nah untuk membedakan aplikasi website satu dengan yang lain disusunlah model hierarki. Konsep inilah yang membedakan framework ini dengan konsep framework CodeIgniter.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Tole : "Pakdhe..Pakdhe..coba sampean lihat gambarnya...kok mirip seperti becak ya? itu lho,kok ya aneh-aneh saja" Tole :"Lha ya itu, coba to sampean perhatiin lagi...bener kan mirip becak?"

"

Pakdhe :"Huss...gimana to?kok mirip becak?apa gara-gara ada 3 bagian itu?oalah..imajinasi sampean

Pakdhe :"Whooo..iya ya...bener sampean, kalau tak perhatikan dengan seksama memang mirip becak je.Ya sudah kalau begitu framework yang kita bikin nanti kita namakan becak aja, piye?setuju nggak sampean?" Tole : "wheladalah...setuju buanget Pakdhe...Becak MVC Framework made in Pakdhe Sakiyun, keren kan Pakdhe "

Dari percakapan antara si Pakdhe Sakiyun dan Tole Dulkamit inilah, akhirnya muncul inspirasi tentang penamaan framework yang dibangun ini. Dari hasil diskusi yang panjang lebar dan tentunya disertai dengan proses semedi yang lama, maka framework ini sepakat dinamakan "Becak Model View Controller" atau disingkat "Becak MVC" OK,kita lanjutkan saja. Secara garis besar cara kerja framework kita ini dapat dilihat pada gambar dibawah ini.

Nah..pada implementasinya, framework yang akan kita bangun nanti terdiri dari 5 sub sistem yaitu : sub sistem core, databases, libraries, helpers dan aplication(controllers, models dan views versi pengembang aplikasi website). Secara umum gambaran diagramnya terlihat seperti gambar dibawah ini. Hanya saja dalam tulisan kali ini saya akan konsentrasi ke pembangunan sistem core saja. Untuk sub sistem yang lain akan saya bahas dilain waktu.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Adapun susunan folder keseluruhan dari framework ini terlihat seperti pada gambar disamping ini. Pada sub folder system (lingkaran nomor 1, warna hijau) terdapat 3 buah sub folder penting yaitu sub folder core, database, helpers dan libraries. Didalam ketiga folder iniliah letak program inti dalam framework kita. Jika secara keseluruhan framework ini saya analogikan sebagai mobil, maka sistem core ini ibaratnya seperti mesinnya. penggerak utama dari keseluruhan sistem dalam framework ini adalah sistem core. Sedangkan database, library dan helper adalah fungsi-fungsi tambahan sebagai pelengkap dari keseluruhan sistem. Untuk database, library dan helper akan saya bahas pada artikel yang lain. Untuk saat ini kita konsentrasi ke sistem core saja. Sedangkan sistem application (lingkaran 2 warna merah) fungsinya untuk apa? pada application inilah nantinya aplikasi web yang dikembangkan oleh pengguna framework ini berada. Jadi pada intinya Ibarat

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

ingin membuat sebuah mobil, para pengembang aplikasi web itu tidak perlu lagi capek-capek membuat semua komponen mobil mulai dari awal. Mereka cukup memanfaatkan dan merangkai fasilitas-fasilitas yang sudah tersedia menjadi sebuah mobil. Dengan konsep kerja semacam ini tentunya siapapun akan lebih mudah dalam mengembangkan sebuah aplikasi web. Hanya saja tata cara pembuatan web tersebut tentunya harus mengikuti aturan main yang distandarisasikan oleh pengembang framework. Jadi kesimpulannya framework ini boleh dimanfaatkan sebebas-bebasnya untuk membuat aplikasi apapun asalkan para pengembang aplikasi web bersedia mengikuti aturan mainnya pakdhe Sakiyun. Aturan mainnya bagaimana? gampang...sediakan saja sebungkus kopi dan segelas rokok pasti beres urusannya :D OK, kembali lagi ke sistem core, sebenarnya class yang paling pokok dalam sistem core tersebut adalah class controller. Class controller inilah nantinya akan diturunkan (extends) ke semua class controller yang dibuat oleh pengembang web site. Perlu kita pahami bahwa tugas utama class controller adalah memuat (loaded) semua object yang dibutuhkan oleh sistem, seperti misalnya library, helper, database, view, plugins dan lain sebagainya. Oleh karena itu agar codingnya tidak terlalu panjang maka fungsi-fungsi untuk memuat berbagai macam object tersebut kita tuliskan kedalam class loader. Secara umum desain class diagram sistem core ini terlihat seperti gambar dibawah ini.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Tole :"Pakdhe...kok kayaknya rumit ya?apa memang framework itu rumit?" Pakdhe :"Yang rumit apanya Tole?ini kan baru pengantarnya saja, Pakdhe belum bahas programnya lho" Tole :"Waduh...pengantarnya saja sudah bikin saya pusing Pakdhe, apalagi programnya Pakdhe "Sabar Tole, diikuti saja dulu nanti kan lama-lama ngerti juga.Makanya dengerin Pakdhe cerita dulu biar nggak pusing

OK. Pertama-tama coba saya bahas bagaimana membangun modul core terlebih dahulu. Sebelum dilanjut ke desain sistem, perlu saya jelaskan terlebih dahulu struktur directory modul core-nya. Lihat gambar disamping. Perhatikan letak directory modul core (lingkaran nomor 1). Sedangkan global_controller.php (lingkaran nomor 2) akan saya bahas lebih lanjut pada sub bagian 7 pada artikel ini. Pada folder system/core tersebut terdapat 6 program yaitu :
1. 2. 3. 4. 5. 6. base bootstrap common controller loader model

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

1. base.php class base ini berfungsi untuk digunakan untuk menyimpan instance object. Dalam susunan hierarki, base class ini menempati urutan tertinggi atau dapat diistilahkan root class. Tidak ada yang istimewa dalam class ini. Hanya saja fungsi dasarnya adalah menukarkan isi variable object itu sendiri ($this) ke variable $instance. Berikut ini script class base yang saya maksud.
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.

<?php defined('SYS') or exit('Access Denied!'); /* * Becak MVC Framework version 1.0 * * File : base.php * Directory : system/core * Author : Eko Heri Susanto * Description : class base adalah class yang digunakan untuk menyimpan instance object */ class base { private static $instance; public static $helpers = array(); public static $models = array(); public static $databases = array(); public function __construct(){ self::$instance = &$this; } public static function getInstance(){ return self::$instance; } } function this(){ return base::getInstance(); } ?>

2. bootstrap Bootstrap ini bukan sebuah class. program ini berfungsi hanya untuk meng-include-kan/memanggil program-program penting lain yang diperlukan oleh aplikasi. Selain itu bootstrap ini juga berfungsi untuk mengeksekusi controller yang yang dipanggil oleh user.
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8.

<?php defined('SYS') or exit('Access Denied!'); /* * Becak MVC Framework version 1.0 * * File : becak.php * Directory : system/core * Author : Eko Heri Susanto * Description : routine untuk memuat (loaded) system utama serta routine untuk menjalankan d efault controller 9. */ 10. 11. //panggil class inti (core) 12. 13. 14. require (SYS.'constant'.DS.'file.php'); 15. require (SYS.'core'.DS.'common.php');

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.

require (SYS .'error'. DS .'errors.php'); require (SYS.'libraries'. DS .'benchmark_library.php'); $benchmark = common::register('Benchmark'); $benchmark->mark('total_execution_time_start'); require require require require require require require require (SYS.'core'.DS.'loader.php'); (SYS.'core'.DS.'base.php'); (SYS.'core'.DS.'controller.php'); (SYS.'core'.DS.'model.php'); (SYS.'libraries'.DS.'router_library.php'); (SYS.'libraries'.DS.'uri_library.php'); (SYS.'libraries'.DS.'output_library.php'); (SYS.'libraries'.DS.'config_library.php');

date_default_timezone_set(common::config_item('timezone_set')); $uri = common::register('Uri'); $router = common::register('Router'); $output = common::register('Output'); if ($output->_display_cache($uri) == TRUE) { exit; } $GLOBALS['d'] $GLOBALS['c'] $GLOBALS['m'] = $router->fetch_directory(); = $router->fetch_class(); = $router->fetch_method(); // Get requested directory // Get requested controller // Get requested method

//panggil default controller pada directory application/controller if(! file_exists(DIR.$GLOBALS['d'].DS.'controllers'.DS.$GLOBALS['c'].PHP_EXT)) { if($router->query_string) show_404("{$GLOBALS['d']}/{$GLOBALS['c']}/{$GLOBALS['m']}");

throw new Exception('Unable to load your default controller.Please make sure the contr oller specified in your Routes.php file is valid.'); 50. } 51. require (DIR.$GLOBALS['d'].DS.'controllers'.DS.$GLOBALS['c'].PHP_EXT); 52. 53. if ( ! class_exists($GLOBALS['c']) 54. OR $GLOBALS['m'] == 'controller' 55. OR in_array(strtolower($GLOBALS['m']), array_map('strtolower', get_class_methods('Controller') )) 56. ){ 57. show_404("Class {$GLOBALS['d']}/{$GLOBALS['c']}/{$GLOBALS['m']}"); 58. } 59. 60. $MC = new $GLOBALS['c'](); 61. 62. if ( ! in_array(strtolower($GLOBALS['m']), array_map('strtolower', get_class_methods($MC)))){ 63. 64. 65. 66. 67. 68. 69. 70. 71. show_404("{$GLOBALS['d']}/{$GLOBALS['c']}/{$GLOBALS['m']}"); } call_user_func_array(array($MC, $GLOBALS['m']), array_slice($uri->rsegments, 3)); $output->_display(); while (ob_get_level() > 0) { ob_end_flush(); } ?>

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

3. Common Class common ini berisi penanganan fungsi-fungsi umum misalnya register object, membaca configurasi dan operasi file. Telah disinggung diatas bahwa tugas dari class loader adalah memuat berbagai macam object yang dibutuhkan oleh sistem. Dalam class ini ada 2 (dua) function yang sangat penting yaitu singleton dan register. Apa itu singleton dan register? ada sub bab class Loader dibawah akan saya ulas lebih lanjut.
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.

<?php defined('SYS') or exit('Access Denied!'); /* * Becak MVC Framework version 1.0 * * File : common.php * Directory : system/core * Author : Eko Heri Susanto * Description : class umum */ //class registry digunakan untuk mendaftarkan variable menjadi object class common { private static $object = array(); private static $instance; //singleton private static function singleton(){ if(!isset(self::$instance)) self::$instance = new self(); return self::$instance; } private function get($id){ if(isset(self::$object[$id])){ return self::$object[$id]; } return NULL; } private function set($id, $value){ self::$object[$id] = $value; } private static function getObject($id) { return self::singleton()->get($id); } private static function setObject($id, $instance){ return self::singleton()->set($id, $instance); } private static function get_static($filename = 'config', $var = '', $folder = '') { static $static = array(); if ( ! isset($static[$filename])) { if ( ! file_exists($folder. DS .$filename. PHP_EXT)) throw new Exception('The static file '. DS .$folder. DS .$filename. PHP_EXT .' doe s not exist.'); require($folder. DS .$filename. PHP_EXT);

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

49. 50. 51. 52. 53.

if($var == '') $var = &$filename;

if ( ! isset($$var) OR ! is_array($$var)) { throw new Exception('The static file '. DS .$folder. DS .$filename. PHP_EXT .' fil e does not appear to be formatted correctly.'); 54. } 55. 56. $static[$filename] =& $$var; 57. } 58. 59. return $static[$filename]; 60. } 61. public static function get_config($filename = 'config', $var = '') 62. { 63. return self::get_static($filename, $var, APP. DS. 'config'); 64. } 65. 66. /* Fungsi register digunakan untuk mendaftarkan variable menjadi object.*/ 67. public static function register($ClassName){ 68. $Obj = self::singleton(); 69. $ClassName = strtolower($ClassName); 70. if($Obj->getObject($ClassName) != NULL){ 71. return $Obj->getObject($ClassName); 72. } 73. $Class = $ClassName; 74. $Obj->setObject($ClassName, new $Class()); 75. $Object = $Obj->getObject($ClassName); 76. if(is_Object($Object)) return $Object; 77. } 78. public static function config_item($item, $config_name = 'config') 79. { 80. static $config_item = array(); 81. 82. if ( ! isset($config_item[$item])) 83. { 84. $config_name = self::get_config($config_name); 85. if ( ! isset($config_name[$item])) return FALSE; 86. 87. $config_item[$item] = $config_name[$item]; 88. } 89. return $config_item[$item]; 90. } 91. public static function is_really_writable($file) 92. { 93. // If we're on a Unix server with safe_mode off we call is_writable 94. if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE) 95. { 96. return is_writable($file); 97. } 98. 99. // For windows servers and safe_mode "on" installations we'll actually 100. // write a file then read it. Bah... 101. if (is_dir($file)) 102. { 103. $file = rtrim($file, '/').'/'.md5(rand(1,100)); 104. 105. if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) 106. { 107. return FALSE; 108. }

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124.

fclose($fp); @chmod($file, DIR_WRITE_MODE); @unlink($file); return TRUE; } elseif (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) { return FALSE; } fclose($fp); return TRUE; } }//end class ?>

4. Controller Seperti yang sudah saya jelaskan diatas, class controller inilah dijadikan induk dari keseluruhan controller yang dibuat oleh user. Pada class ini hanya terdapat konstrktor yang menjalankan function _init, dimana dalam function _init tersebut bertugas mendaftarkan library utama guna mendukung jalannya aplikasi. Apa itu library utama? nanti saya jelaskan di artikel lain yang khusus membahas tentang library.
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.

<?php defined('SYS') or exit('Access Denied!'); /* * Becak MVC Framework version 1.0 * * File : controller.php * Directory : system/core * Author : Eko Heri Susanto * Description : class controller ini adalah induk dari semua controller */ require(APP .'globals'. DS .'global_controller'. PHP_EXT); class controller extends global_controller public function __construct(){ parent::__construct(); $this->_init(); } private function _init() { $Classes = array( 'config' => 'router' => 'uri' => 'output' => ); {

'Config', 'Router', 'URI', 'Output'

foreach ($Classes as $public_var => $Class) { $this->$public_var = common::register($Class); } } }//end class ?>

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

5. Loader Telah disinggung diatas bahwa tugas class loader adalah memuat berbagai macam object yang dibutuhkan oleh sistem. Namun kenyataannya pada saat memuat sebuah object, bisa saja object yang sama sudah pernah termuat sebelumnya. Jika hal ini dibiarkan maka akan mengakibatkan terjadinya penumpukan inisialisasi object yang sama pada memory. Penumpukan inisialisasi object ini tentu saja mengakitbatkan pemborosan pemakaian memory. Untuk menghindari hal tersebut maka dibutuhkan pola desain (design pattern) singleton yang contoh programmnya sudah saya copy-paste pada sub bab common diatas. Tugas utama singleton adalah memastikan bahwa tidak ada object yang sama dimuat lebih dari satu kali. Penghematan penggunaan memory wajib kita lakukan dengan harapan manakala web site kita sudah diakses oleh banyak orang, maka bisa kita minimalisir kemungkinan terjadinya macet (down) web server kita. Pada contoh program yang saya lampirkan, penulisan fungsi singleton ini bisa anda temui pada file common.php. Berikut ini source code class Loader yang saya maksud.
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.

<?php defined('SYS') or exit('Access Denied!'); /* * Becak MVC Framework version 1.0 * * File : loader.php * Directory : system/core * Author : Eko Heri Susanto * Description : class loader berfungsi untuk memuat (loaded) library, helper, view, model */ class loader { private static $helpers = array(); private static $sys_helpers = array(); public static function sys_library($library){ self::_library($library, 'system'); } public static function app_library($library){ self::_library($library, 'application'); } public static function library($library){ self::_library($library, 'directories'); } private static function _library($library, $folder = 'system'){ if($library=='')return false; $library = strtolower($library); switch($folder){ case 'system' : $lib_folder = SYS.'libraries'.DS;break; case 'application' : $lib_folder = APP.'libraries'.DS;break; case 'directories' : $lib_folder = DIR.$GLOBALS['d'].DS.'libraries'.DS;break; } if(file_exists($lib_folder.$library.'_library'.PHP_EXT )) { require ($lib_folder.$library.'_library'.PHP_EXT ); base::getInstance()->$library = common::register($library); } else throw new Exception("Can't load library file: " . $library); } public static function sys_helper($helper) { self::_helper($helper, 'system'); }

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97.

public static function app_helper($helper='') { self::_helper($helper, 'application'); } public static function helper($helper =''){ self::_helper($helper, 'directories'); } private static function _helper($helper, $folder = 'system') { if($helper=='')return false; if( isset(self::$helpers[$helper]) ){ return; } $helper = strtolower($helper); switch($folder){ case 'system' : $hlp_folder = SYS.'helpers'. DS;break; case 'application' : $hlp_folder = APP.'helpers'. DS;break; case 'directories' : $hlp_folder = DIR.$GLOBALS['d'].DS.'helpers'.DS;break; } if(file_exists($hlp_folder . $helper.'_helper'. PHP_EXT)){ include($hlp_folder . $helper.'_helper'. PHP_EXT); self::$helpers[$helper] = $helper; return; } else throw new Exception("Can't load helper file: " . $helper); } public static function app_model($model_name){ self::_model($model_name, 'application'); } public static function model($model_name){ self::_model($model_name, 'directories'); } private static function _model($model_name, $folder = 'system'){ if($model_name=='')return; $model_name = strtolower($model_name); $model_var = &$model_name; if (isset(base::getInstance()->$model_var) AND is_object(base::getInstance()>$model_var)) { return; } switch($folder){ case 'application' : $mdl_folder = APP.'models'.DS;break; case 'directories' : $mdl_folder = DIR.$GLOBALS['d'].DS.'models'.DS;break; } if(file_exists($mdl_folder.$model_name.PHP_EXT )) { require ($mdl_folder.$model_name.PHP_EXT ); base::getInstance()->$model_var = new $model_name(); base::getInstance()->$model_var->_assign_db_objects(); base::$models[$model_var] = base::getInstance()->$model_var; } else throw new Exception("Can't load model file: " . $model); } public static function database($db_name = 'db'){ $db_var = $db_name; $obj = base::getInstance(); if (isset($obj->{$db_var}) AND is_object($obj->{$db_var}) ) { return; } require (SYS .'database'. DS .'db_factory'. PHP_EXT); $obj->{$db_var} = db_factory::callDB($db_name); base::$databases[$db_var] = $db_var; if (count(base::$models) >= 0) { foreach (base::$models as $model_name) $obj->$model_name->$db_var = &$obj->$db_var; } }

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

98. }//end class loader 99. ?>

6. Model Terakhir adalah class model. Class ini difungsikan sebagai induk dari model yang dibuat oleh user. Class model ini sebenarnya hanya berfungsi untuk mendaftar instance database ke base class. Pertanyaannyam kenapa kok instance database tersebut perlu disimpan dan didaftarkan? Framework ini memang didesain mampu mendukung multi connection database. Dikarenakan hal itulah maka masingmasing koneksi perlu disimpan ke memory agar supaya jikalau ada banyak koneksi database yang harus dijalankan, maka variable koneksi tersebut masih tersimpan di memory dan masih bisa digunakan.
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.

<?php defined('SYS') or exit('Access Denied!'); /* * Becak MVC Framework version 1.0 * * File : model.php * Directory : system/core * Author : Eko Heri Susanto * Description : class model ini adalah induk dari semua model */ class model extends base { public function __construct(){ $this->_assign_db_objects(); } public function _assign_db_objects(){ foreach(base::$databases as $key){ $this->$key = &base::getInstance()->$key; } } }//end class model ?>

7. Global controller Global controller adalah class yang digunakan untuk deklarasi variable-variable global, misalnya base_url, directory resource gambar, CSS, javascript dsb. Atau bisa juga digunakan untuk memanggil library dan helper yang nantinya digunakan pada seluruh aplikasi. Lokasi program global controller pada framework ini tersimpan di folder application/globals(Lihat gambar diatas-lingkaran nomor 2). Global controller ini sebenarnya mempunyai fungsi yang mirip seperti perintah $_GLOBAL. Jadi pada class inilah tempat mendeklarasikan semua variabel-variabel ataupun function yang sifatnya umum.
view plainprint?

1. <?php defined('SYS') or exit('Access Denied!'); 2. class global_controller extends base { 3. public $base, $base_url, $base_img; 4. public $title, $head, $meta; 5. public $calendar=''; 6. public function __construct(){ 7. parent::__construct(); 8. loader::sys_helper('view');

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

9. 10. 11. 12. 13. 14. 15. 16. 17.

loader::sys_helper('head_tag'); $this->base = common::config_item('base_url'); $this>base_url = common::config_item('base_url') . common::config_item('index_page'); $this->base_img = common::config_item('source_url').'images/'; $this->meta = meta('Content-type', 'text/html; charset=utf-8', 'equiv'); $this->meta .= meta('author', 'Eko Heri Susanto'); } } ?>

8. Index.php Tentunya anda sudah paham apa kegunaan dari index.php kan? apa hayo? Index.php adalah file yang secara default akan dijalankan pertama kali ketika ada user (pengguna) yang mengkases web site. Nah ini source code-nya
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.

<?php error_reporting(E_ALL | E_STRICT); define('DS', DIRECTORY_SEPARATOR); define('SYS', 'system'.DS); define('APP', 'application'.DS); define('DIR', APP . 'directories'.DS); define('PHP_EXT', '.php'); define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME)); if ( get_magic_quotes_gpc() ) { function stripslashes_gpc(&$value){ $value = stripslashes($value); } array_walk_recursive($_GET, 'stripslashes_gpc'); array_walk_recursive($_POST, 'stripslashes_gpc'); array_walk_recursive($_COOKIE, 'stripslashes_gpc'); array_walk_recursive($_REQUEST, 'stripslashes_gpc'); } require(SYS .'core'.DS.'bootstrap.php'); ?>

Sampai disini pembahasan modul core (inti) selesai. Untuk library routing dan uri tidak saya bahas disini. Silahkan anda ikuti artikel saya berikutnya.

Tutorial Membangun Sistem Database


Operasi database adalah salah satu fasilitas yang mutlak harus ada dalam sebuah framework MVC. Pada tulisan kali saya akan mengulas bagaimana membuat class Model dan fungsi-fungsi untuk operasi database. Dalam pemrograman PHP terdapat beberapa cara untuk mengoperasikan database khususnya mysql, antara lain menggunakan metode klasik yaitu dengan memanfaatkan fungsi bawaan (mysql_connect,

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

mysql_select_db, mysql_query). Codeigniter merupakan salah satu contoh framework MVC yang memanfaatkan operasi klasik ini(http://www.codeigniter.com). Selain operasi database klasik diatas, saat ini sudah tersedia modul PHP Data Object (PDO). PDO didesain mampu men-support banyak engine database misalnya MySql, Oracle, PostgresSQL, Ms Sql server dsb. PDO mendukung pemrograman berorientasi object (OOP), sehingga syntax pemrogramannya lebih sistematis dan mudah digunakan. Sayangnya tidak semua web hosting telah mengaktifkan modul PDO, bahkan ada juga web hosting yang tidak menyediakan modul PDO ini. Salah satu framework yang memanfaatkan operasi database PDO adalah Obullo (http://www.obullo.com). Memang operasi database klasik maupun PDO mempunyai kelebihan dan kelemahan. Oleh karena itu pada framework ini sengaja saya sediakan dua-duanya. Jadi nantinya programmer bisa memilih, bisa menggunakan operasi database klasik atau PDO. Tole : "Pakdhe..pakdhe, kalau framework sampean ini mendukung dua operasi database apa tidak semakin berat kerja server-nya Pakdhe?" Pakdhe : "Ya tidaklah Tole, kan nantinya programmer milih salah satu, dan ketika salah satu operasi tadi dipilih operasi yang lain tidak di-load, jadi tidak berat kerja server-nya" Tole :"O..gitu to Pakdhe,ya sudah Pakdhe, tak simaknya dulu ntar nanti kita buktikan ya Pakdhe...kerja servernya berat apa tidak"

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Pada implementasinya, sengaja saya gunakan design pattern factory, adapter dan driver. Hal ini bertujuan agar framework ini fleksibel dan mudah untuk digunakan oleh programmer yang lain. Untuk lebih memudahkan dalam pembuatan program, sengaja operasi database ini saya letakkan pada folder system/database. Adapun susunan direktori operasi database ini, terlihat seperti gambar disamping ini. Driver database yang saya sediakan hanya mysql. Dilain waktu saya akan menambahkan driver untuk database lain misalnya Oracle, MS SQL Server, Postgres SQL dan sebagainya. Tentunya masingmasing driver tersebut mendukung operasi klasik dan PDO. 1. Factory Jika kita baca di bukunya Gang of Four "Design Patterns: Elements of Reusable Object-Oriented Software", factory ini tergolong dalam kreasional desain. Factory tersebut perlu kita buat ketika kita perlu mendefinisikan sebuah tipe data/class (kita sebut kreator) yang berfungsi untuk membuat objek dari tipe data/class yang berbeda (kita sebut produk). Tujuannya adalah agar pengguna tidak perlu capek-capek mempelajari class produk tadi. Pada framework ini yang disebut factory adalah class db_factory sedangkan yang disebut class produk adalah db_adapter. Dalam literatur lain, saya menemukan ada sistem dependency injection. Sistem dependency injection ini lebih sederhana dibandingkan dengan factory. Oleh karena itu dalam pembuatan program kali ini saya memanfaatkan dependency injection dalam membangun class database factory. Dibawah ini contoh source code class db_factory
view plainprint?

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.

<?php defined('SYS') or exit('Access Denied!'); /* * Becak MVC Framework version 1.0 * * File : db_factory.php * Directory : system/database * Author : Eko Heri Susanto * Description : penyedia koneksi ke bermacam-macam database */ class db_factory { public static function callDB($db_name){ include APP.'config'.DS.'database'.PHP_EXT; if(!is_array($config[$db_name])) throw new Exception("Please set a valid database driver from config database file" ); $driver_class = strtolower($config[$db_name]['type']); include SYS.'database'.DS.'driver'.DS.$driver_class.PHP_EXT; include SYS.'database'.DS.'db_adapter'.PHP_EXT; $driver = new $driver_class($config[$db_name]); $adapter = new db_adapter($driver); return $adapter; }//end callDB }//end class ?>

2. Adapter Telah saya sebutkan diatas, operasi database dalam framework ini mendukung banyak driver database. (mysql, oracle ms-sql server dsb). Sebenarnya masing-masing driver tersebut cara penggunaannya tentu berbeda antara satu dengan yang lain. Oleh karena itu kita perlu design pattern adapter agar pengguna tidak perlu memikirkan bagaimana cara mengoperasikan masing-masing driver tersebut.

Gambar disamping menunjukkan desain sistem db_factory dan db_adapter yang sudah saya jelaskan sebelumnya. Fungsi/method callDB pada class db_factory ini nantinya akan dipanggil pada fungsi database yang ada di class loader. Untuk lebih jelasnya silakan anda lihat contoh source code yang saya sertakan. Ingat class loader ini terdapat pada folder core.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Coba anda perhatikan method yang terdapat pada db_adapter, disitu terdapat metode-metode untuk mengoparesikan database seperti pencarian (select), penambahan (insert), perubahan (update) dan penghapusan (delete) data. Saya temukan dibeberapa contoh framework, method-method ini ada yang menyebutnya dengan istilah active record. Dibeberapa buku design pattern active record ini sudah diakui sebagai salah satu pola dalam design pattern. Dibawah ini contoh source code class db_adapter
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.

<?php defined('SYS') or exit('Access Denied!'); /* * Becak MVC Framework version 1.0 * * File : db_adapter.php * Directory : system/database * Author : Eko Heri Susanto * Description : fungsi common (CRUD) untuk database */ class db_adapter { private $driver = null; private $sql = ''; public function __construct($driver){ $this->driver = $driver; $this->driver->connect(); } public function __destruct(){ $this->driver->disconnect(); } public function select($sql){ $this->sql = $sql; } public function fetch_array(){ return $this->driver->results($this->sql, 'array'); } public function fetch_object(){ return $this->driver->results($this->sql, 'object'); } public function query($sql){ return $this->driver->query($sql); } public function insert($table, $data){ $sql = "INSERT INTO ".$table; $multi_rows = FALSE; foreach($data as $key => $val){ if(!is_array($val) ) { $fields[$key] = $key; $rows[$key] = $this->escape($val); }else { $multi_rows = TRUE; foreach($val as $skey => $sval){ $fields[$skey] = $skey; $row[$skey] = $this->escape($sval); } $rows[$key] = "(".implode(', ', $row).")"; } } $sql .= " (". implode(', ', $fields).") VALUES "; if(!$multi_rows) $sql .= "(". implode(', ', $rows).");"; else $sql .= implode(', ', $rows).";"; return $this->driver->query($sql);

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103.

} public function update($table, $data, $where=NULL){ $sql = "UPDATE ".$table." SET "; $values = array(); foreach($data as $key => $val){ $values[$key] = $key." = ".$this->escape($val); } $sql .= implode(", ", $values); if(is_array($where)){ $filter = array(); foreach($where as $key => $val){ $filter[$key] = "(".$key." = ".$this->escape($val).")"; } $sql .= " WHERE ".implode(" AND ", $filter); } return $this->driver->query($sql); } public function delete($table, $where=NULL){ $sql = "DELETE FROM ".$table; if(is_array($where)){ $filter = array(); foreach($where as $key => $val){ $filter[$key] = "(".$key." = ".$this->escape($val).")"; } $sql .= " WHERE ".implode(" AND ", $filter); } return $this->driver->query($sql); } private function escape($str) { if(is_string($str)){ return "'".str_replace("'", "''",$str)."'"; } if(is_integer($str)) return (int)$str; if(is_double($str)) return (double)$str; if(is_float($str)) return (float)$str; if(is_bool($str)) return ($str === FALSE) ? 0 : 1; if(is_null($str)) return 'NULL'; } }//end class ?>

3. Driver OK, selanjutnya mari kita lanjutkan untuk membahas class driver. Ingat class driver ini merupakan tata cara pengoperasian database yang sesungguhnya. Gambar dibawah ini menjelaskan struktur desain sistem driver database.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Berikut ini contoh source code class mysql (operasi database klasik)
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.

20.

21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.

<?php defined('SYS') or exit('Access Denied!'); /* * Becak MVC Framework version 1.0 * * File : mysql.php * Directory : system/database/driver * Author : Eko Heri Susanto * Description : driver mysql */ class mysql { private $conn; private $config; public function __construct($config){ $this->config = $config; } public function connect() { extract($this->config); if(isset($this->conn)) return $this->conn; $this>conn = @mysql_connect($server,$user,$password, true) or show_error("Unable connect to mysql s erver.Please make sure the server, username or password specified in your Database.php file is valid."); @mysql_select_db($database, $this>conn) or show_error("Unable to select your default database name.Please make sure the databas e name specified in your Database.php file is valid."); } public function disconnect(){ if(isset($this->conn)) { @mysql_close($this->conn); } } public function query($sql){ $result = @mysql_query($sql, $this->conn); if (!$result) { show_error(mysql_error()); } return $result; } public function results($query, $type = 'object'){ $result = $this->query($query); $return = array(); while ($row = @mysql_fetch_object($result)) { if($type == 'array') $return[] = (array) $row; else $return[] = $row; } @mysql_free_result($result); return @$return;

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

45. } 46. }//end class 47. ?>

Berikut ini contoh source code class mysql_pdo (operasi database PDO)
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.

<?php defined('SYS') or exit('Access Denied!'); /* * Becak MVC Framework version 1.0 * * File : pdo_mysql.php * Directory : system/database/driver * Author : Eko Heri Susanto * Description : driver PDO mysql */ class mysql_pdo { private $conn; private $config; public function __construct($config){ $this->config = $config; } public function connect() { extract($this->config); if(isset($this->conn)) return $this->conn; try{ $this->conn = new PDO ("mysql:host=$server;dbname=$database",$user,$password); }catch(PDOException $e){ echo __LINE__.$e->getMessage(); } } public function disconnect(){ if(isset($this->conn)) { $this->conn = null; } } public function query($sql){ $result = null; try{ $result = $this->conn->exec($sql) or print_r($this->conn->errorInfo()); }catch(PDOException $e){ echo __LINE__.$e->getMessage(); } return $result; } public function results($query, $type = 'object'){ $result = $this->conn->query($query) or print_r($this->conn->errorInfo()); $result->setFetchMode(PDO::FETCH_ASSOC); return $result; } }//end class ?>

Sampai disini pembahasan mengenai operasi database sudah selesai. Selanjutnya coba saya jelaskan bagaimana cara menjalankan contoh program yang saya sertakan.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Pertama-tama anda siapkan dulu database-nya. Caranya buka phpmyadmin, kemudian buat database baru dengan nama blogkomputer. Setelah itu silakan anda buat table content seperti contoh dibawah ini.
view plainprint?

1. 2. 3. 4. 5. 6.

CREATE TABLE `blogkomputer`.`content` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `judul` VARCHAR( 100 ) NOT NULL , `kategori` VARCHAR( 100 ) NOT NULL , `isi` TEXT NOT NULL ) ENGINE = MYISAM ;

Setelah table-nya selesai anda buat, jangan lupa isikan contoh datanya. Ini saya sertakan query untuk mengisi data table content tersebut
view plainprint?

1. INSERT INTO `blogkomputer`.`content` (`id`, `judul`, `kategori`, `isi`) VALUES (NULL, 'Ini ada lah judul 1', 'pemrograman', 'isi sembarang data disini'), (NULL, 'ini adalah judul 2', 'becak framework', 'becak framework adalah framework MVC yang mendukung PHP 5');

Langkah kedua coba anda buka file database.php, yang terdapat pada folder application/config, kemudian lakukan pengaturan (setting) konfigurasi database. Lihat contoh dibawah ini
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.

$config = array(); // jika ingin menggunakan PDO ubah mejadi 'mysql_pdo' $config['db']['type'] = 'mysql'; // jika anda menggunakan PDO, ubah menjadi '127.0.0.01' $config['db']['server'] = 'localhost'; //sesuaikan dengan user yang ada di database mysql anda $config['db']['user'] = 'root'; //sesuaikan dengan password mysql anda $config['db']['password'] = ''; //sesuaikan dengan nama database yang anda buat $config['db']['database'] = 'blogkomputer';

Cukup sampai disini, kedepan akan saya bahas bagaimana membuat library, helper serta menambah error handling. Selamat mencoba, semoga ada guna dan manfaatnya...

Tutorial Membangun Sistem Library


http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Sebenarnya apa sih kegunaan dari library tersebut? seberapa pentingkah keberadaan si raden bagus library tersebut? Library itu adalah berisi sekumpulan class/object yang sering digunakan dalam membangun aplikasi web kita. Oleh karena sering digunakan maka class tersebut distandarisasikan agar pengembang web site dapat memanfaatkan fungsi-fungsi tersebut dengan mudah. Sebagai contoh dalam beberapa framework MVC disediakan library calendar yang berfungsi untuk menampilkan kalender, library pagination berfungsi untuk menampilkan paging pada halaman web site, library email berfungsi untuk mengirimkan email dan lain sebagainya. Terdapat lima library core pada Framework MVC yaitu Router, Uri, Output, Config dan Benchmark. Kelima library ini dikategorikan library inti dikarenakan setiap aplikasi web dijalankan kelima library ini selalu dipanggil secara terus menerus. Kali ini pakdhe Sakiyun akan mencoba mengulas tentang apa fungsi dan bagaimana source code kelima library tersebut. Tidak lupa kelima library ini tentunya merupakan serangkaian artikel bersambung kita dalam rangka membangun framework becak MVC. Tole Dulkamit : wee...lhadalah...ternyata becak sampean itu ada library-nya to pakdhe? itu kok nama library-nya menakutkan to pakdhe?Lihat namanya saja saya kok sudah merinding duluan...suerem bin sangar lho pakdhe... Pakdhe Sakiyun : tenang Tole..tinggal copy-paste aja lho kok repot to sampean itu? Pakdhe aja nggak takut kok sampean takut to? Tole Dulkamit : byuh..sakti benar pakdhe ini bisa bikin library yang menyeramkan seperti itu. Pakdhe Sakiyun : yang sakti itu yang punya ide dan yang bisa bikin library-nya Tole..lha emangnya pakdhe bikin sendiri?..ya nggaklah Tole. Sama seperti sampean pakdhe juga tinggal copy-paste aja dari punyanya orang tapi pakdhe pasang di becak pakdhe...Pakdhe hanya nyomot dari library-nya CodeIgniter dan Obullo saja kok Tole.. 1. Uri dan Routing Kita awali dulu untuk membahas library Uri dan Routing. Sesuai dengan namanya kedua library ini berfungsi untuk pengaturan pembacaan Uniform Resource Locator (URL). Para pembaca pastinya sudah terbiasa dengan istilah URL kan? iya betul..setiap kali kita ingin mengakses sebuah situs pastinya kita selalu mengetikkan alamat situs web tersebut pada browser kita. Sayapun juga yakin dengan seyakin yakinnya kalau pembaca juga sudah memahami apa dan untuk apa itu query string. Query string sering digunakan jikalau pengguna web site ingin mengirimkan (passing) parameter ke server melalui URL. Nah...ini dia...fungsi kedua library tersebut barulah berguna ketika si pengembang website berkeinginan untuk mempercanti/memperindah URL. Ini yang aneh kali ya...cuman ketikkan saja kok minta diperindah kayak syair saja. Biar tau betapa cantiknya sebuah URL, coba anda lihat gambar dibawah ini

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Anda tau bukan? kalau yang dibelakangnya index.php (mulai gambar nomor 3 sampai dengan nomor 8) itu sebenarnya adalah parameter? nah kalau tanpa menggunakan library Uri dan Routing tentunya URLnya tidak seperti gambar diatas, tapi berbentuk seperti ini :
http://blogkomputer.com/index.php?d=web&c=page&m=content&data1=1&data2=Tutorial-Membangun-SistemCore

Yang dimaksud paramater tersebut adalah sebagai berikut :


d adalah directory : merupakan lokasi directory file controller-nya c adalah controller : merupakan nama controller yang dijalankan m adalah method : merupakan nama method/function yang ada di dalam class controller data1, data2 data 3 dst : merupakan data parameter yang dibutuhkan oleh si method tadi.

Coba bandingkan URL yang dibawah dengan gambar URL yang diatas tadi..lebih cantik mana hayo? Saya yakin semua orang akan menjawab lebih cantik ibu saya, soalnya kalau ibu saya tidak cantik nggak mungkin ibu saya dinikahi bapak saya dan punya anak saya.. Jadi secara singkat fungsi library Uri itu untuk mem-parsing URL yang dikirim oleh browser, sedangkan Router berfungsi untuk mengambil (fetch) query string tadi untuk selanjutnya parameter-parameter tadi akan di-eksekusi oleh framework. Dibawah ini adalah source library Uri
view plainprint?

1. <?php defined('SYS') or exit('Access Denied!'); 2. class Uri 3. { 4. public $keyval = array(); 5. public $uri_string; 6. public $segments = array(); 7. public $rsegments = array(); 8. 9. public function __construct(){ 10. //log_message('debug', "URI Class Initialized"); 11. } 12. public function _fetch_uri_string() 13. { 14. if (strtoupper(common::config_item('uri_protocol')) == 'AUTO') 15. { 16. if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '') 17. { 18. $this->uri_string = key($_GET); 19. return;

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

20. 21. O'); 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76.

} $path = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INF if (trim($path, '/') != '' && $path != "/".SELF) { $this->uri_string = $path; return; } $path = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : @getenv('Q UERY_STRING'); if (trim($path, '/') != '') { $this->uri_string = $path; return; } $path = (isset($_SERVER['ORIG_PATH_INFO'])) ? $_SERVER['ORIG_PATH_INFO'] : @getenv ('ORIG_PATH_INFO'); if (trim($path, '/') != '' && $path != "/".SELF) { $this->uri_string = str_replace($_SERVER['SCRIPT_NAME'], '', $path); return; } $this->uri_string = ''; } else { $uri = strtoupper(config_item('uri_protocol')); if ($uri == 'REQUEST_URI') { $this->uri_string = $this->_parse_request_uri(); return; } $this->uri_string = (isset($_SERVER[$uri])) ? $_SERVER[$uri] : @getenv($uri); } if ($this->uri_string == '/') { $this->uri_string = ''; } } public function _parse_request_uri() { if ( ! isset($_SERVER['REQUEST_URI']) OR $_SERVER['REQUEST_URI'] == '') { return ''; } $request_uri = preg_replace("|/(.*)|", "", str_replace("\", "/", $_SERVER['REQUEST_URI '])); if ($request_uri == '' OR $request_uri == SELF) { return ''; } $fc_path = FCPATH.SELF; if (strpos($request_uri, '?') !== FALSE) {

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

77. $fc_path .= '?'; 78. } 79. 80. $parsed_uri = explode("/", $request_uri); 81. 82. $i = 0; 83. foreach(explode("/", $fc_path) as $segment) 84. { 85. if (isset($parsed_uri[$i]) && $segment == $parsed_uri[$i]) 86. { 87. $i++; 88. } 89. } 90. 91. $parsed_uri = implode("/", array_slice($parsed_uri, $i)); 92. 93. if ($parsed_uri != '') 94. { 95. $parsed_uri = '/'.$parsed_uri; 96. } 97. 98. return $parsed_uri; 99. } 100. 101. public function _filter_uri($str) 102. { 103. if ($str != '' && common::config_item('permitted_uri_chars') != '' && common::c onfig_item('enable_query_strings') == FALSE) 104. { 105. if ( ! preg_match("|^[".str_replace(array('\-', '-'), '', preg_quote(common::config_item('permitted_uri_chars'), '-'))."]+$|i", $str)) 106. { 107. show_error('The URI you submitted has disallowed characters.', 400); 108. } 109. } 110. $bad = array('$', '(', ')', '%28', '%29'); 111. $good = array('$', '(', ')', '(', ')'); 112. 113. return str_replace($bad, $good, $str); 114. } 115. public function _remove_url_suffix() 116. { 117. if (common::config_item('url_suffix') != "") 118. { 119. $this>uri_string = preg_replace("|".preg_quote(config_item('url_suffix'))."$|", "", $this>uri_string); 120. } 121. } 122. public function _explode_segments() 123. { 124. foreach(explode("/", preg_replace("|/*(.+?)/*$|", "", $this>uri_string)) as $val) 125. { 126. $val = trim($this->_filter_uri($val)); 127. 128. if ($val != '') 129. { 130. $this->segments[] = $val; 131. } 132. }

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193.

} public function _reindex_segments() { array_unshift($this->segments, NULL); array_unshift($this->rsegments, NULL); unset($this->segments[0]); unset($this->rsegments[0]); } public function segment($n, $no_result = FALSE) { return ( ! isset($this->segments[$n])) ? $no_result : $this->segments[$n]; } public function rsegment($n, $no_result = FALSE) { return ( ! isset($this->rsegments[$n])) ? $no_result : $this->rsegments[$n]; } public function uri_to_assoc($n = 3, $default = array()) { return $this->_uri_to_assoc($n, $default, 'segment'); } public function ruri_to_assoc($n = 3, $default = array()) { return $this->_uri_to_assoc($n, $default, 'rsegment'); } public function _uri_to_assoc($n = 3, $default = array(), $which = 'segment') { if ($which == 'segment') { $total_segments = 'total_segments'; $segment_array = 'segment_array'; } else { $total_segments = 'total_rsegments'; $segment_array = 'rsegment_array'; } if ( ! is_numeric($n)) { return $default; } if (isset($this->keyval[$n])) { return $this->keyval[$n]; } if ($this->$total_segments() < $n) { if (count($default) == 0) { return array(); } $retval = array(); foreach ($default as $val) { $retval[$val] = FALSE; } return $retval;

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254.

} $segments = array_slice($this->$segment_array(), ($n - 1)); $i = 0; $lastval = ''; $retval = array(); foreach ($segments as $seg) { if ($i % 2) { $retval[$lastval] = $seg; } else { $retval[$seg] = FALSE; $lastval = $seg; } $i++; } if (count($default) > 0) { foreach ($default as $val) { if ( ! array_key_exists($val, $retval)) { $retval[$val] = FALSE; } } } $this->keyval[$n] = $retval; return $retval; } public function assoc_to_uri($array) { $temp = array(); foreach ((array)$array as $key => $val) { $temp[] = $key; $temp[] = $val; } return implode('/', $temp); } public function slash_segment($n, $where = 'trailing') { return $this->_slash_segment($n, $where, 'segment'); } public function slash_rsegment($n, $where = 'trailing') { return $this->_slash_segment($n, $where, 'rsegment'); } public function _slash_segment($n, $where = 'trailing', $which = 'segment') { if ($where == 'trailing') { $trailing = '/'; $leading = '';

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302.

} elseif ($where == 'leading') { $leading = '/'; $trailing = ''; } else { $leading = '/'; $trailing = '/'; } return $leading.$this->$which($n).$trailing; } public function segment_array() { return $this->segments; } public function rsegment_array() { return $this->rsegments; } public function total_segments() { return count($this->segments); } public function total_rsegments() { return count($this->rsegments); } public function uri_string() { return $this->uri_string; }

public function ruri_string() { return '/'.implode('/', $this->rsegment_array()).'/'; }

} ?>

Sedangkan source code library Route ada dibawah ini


view plainprint?

1. <?php defined('SYS') or exit('Access Denied!'); 2. class Router { 3. 4. public $config; 5. public $routes = array(); 6. public $error_routes = array(); 7. public $class = '';

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.

public public public public public

$method $directory $uri_protocol $default_controller; $query_string

= 'index'; = ''; = 'auto'; = FALSE; // Obullo 1.0 changes

public function __construct() { //$routes = get_config('routes'); //print_r($routes);

// Obullo changes..

require(APP. 'config'.DS.'routes'. PHP_EXT); $this->routes = ( ! isset($routes) OR ! is_array($routes)) ? array() : $routes; //print_r($this->routes); unset($routes); $this->method = $this->routes['index_method']; $this->uri = common::register('Uri'); $this->_set_routing(); //log_message('debug', "Router Class Initialized"); }

private function _set_routing() { if (common::config_item('enable_query_strings') === TRUE AND isset($_GET[config_item(' controller_trigger')])) 34. { 35. $this->query_string = TRUE; 36. 37. $this->set_directory(trim($this->uri>_filter_uri($_GET[config_item('directory_trigger')]))); 38. $this->set_class(trim($this->uri>_filter_uri($_GET[config_item('controller_trigger')]))); 39. 40. if (isset($_GET[config_item('function_trigger')])) 41. { 42. $this->set_method(trim($this->uri>_filter_uri($_GET[config_item('function_trigger')]))); 43. } 44. 45. return; 46. } 47. 48. $this->default_controller = ( ! isset($this->routes['default_controller']) OR $this>routes['default_controller'] == '') ? FALSE : strtolower($this>routes['default_controller']); 49. 50. $this->uri->_fetch_uri_string(); 51. 52. if ($this->uri->uri_string == '') 53. { 54. if ($this->default_controller === FALSE) 55. { 56. throw new Exception("Unable to determine what should be displayed. A default r oute has not been specified in the routing file."); 57. } 58. 59. $segments = $this->_validate_request(explode('/', $this->default_controller)); 60. $this->set_class($segments[1]); 61. $this->set_method($this->routes['index_method']); // index

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

62. $this->uri->rsegments = $segments; 63. $this->uri->_reindex_segments(); 64. 65. //log_message('debug', "No URI present. Default controller set."); 66. return; 67. } 68. unset($this->routes['default_controller']); 69. 70. $this->uri->_remove_url_suffix(); 71. $this->uri->_explode_segments(); 72. $this->_parse_routes(); 73. $this->uri->_reindex_segments(); 74. } 75. private function _set_request($segments = array()) 76. { 77. $segments = $this->_validate_request($segments); 78. 79. if (count($segments) == 0) 80. return; 81. 82. $this->set_class($segments[1]); 83. 84. if (isset($segments[2])) 85. { 86. $this->set_method($segments[2]); 87. } 88. else 89. { 90. $segments[2] = $this->routes['index_method']; 91. } 92. $this->uri->rsegments = $segments; 93. } 94. private function _validate_request($segments) 95. { 96. if( ! isset($segments[0]) ) $segments[0] = ''; 97. if( ! isset($segments[1]) ) $segments[1] = ''; 98. if (is_dir(DIR.$segments[0])) 99. { 100. $this->set_directory($segments[0]); 101. 102. if( ! emptyempty($segments[1])) 103. { 104. if (file_exists(DIR.$segments[0].DS.'controllers'.DS.$segments[1].PHP_E XT)) 105. return $segments; 106. } 107. 108. } 109. 110. show_404($segments[0].' / '.$segments[1]); 111. echo 'Error '.$segments[0].' / '.$segments[1]; 112. } 113. private function _parse_routes() 114. { 115. if (count($this->routes) == 1) 116. { 117. $this->_set_request($this->uri->segments); 118. return; 119. } 120. 121. $uri = implode('/', $this->uri->segments);

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179.

if (isset($this->routes[$uri])) { $this->_set_request(explode('/', $this->routes[$uri])); return; } foreach ($this->routes as $key => $val) { $key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $key)); if (preg_match('#^'.$key.'$#', $uri)) { if (strpos($val, '$') !== FALSE AND strpos($key, '(') !== FALSE) { $val = preg_replace('#^'.$key.'$#', $val, $uri); } $this->_set_request(explode('/', $val)); return; } } $this->_set_request($this->uri->segments); } public function set_class($class) { $this->class = $class; } public function fetch_class() { return $this->class; } public function set_method($method) { $this->method = $method; } public function fetch_method() { if ($this->method == $this->fetch_class()) { return $this->routes['index_method']; } return $this->method; } public function set_directory($dir) { $this->directory = $dir.''; } public function fetch_directory() { return $this->directory; } } ?>

2. Output Library

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Sesuai dengan namanya, library ini berfungsi untuk menangani output hasil proses. Apa yang diouputkan oleh library ini? yang di-ouputkan berupa script HTML, CSS ataupun Javascript yang berasal dari keseluruhan proses. Anda tentunya paham kalau browser itu kenalnya hanya script HTML HTML, CSS ataupun Javascript. Browser tidak akan pernah mengenal PHP dan memang akan sangat lucu sekali kalau browser mengenal script PHP :D. Padahal kenyataannya keseluruhan hasil proses tersebut tentunya ada serangkaian script PHP yang dijalankan oleh server dan script PHP tersebut dikompilasi untuk menhasilkan HTML. Untuk selanjutnya si HTML itulah yang akan dikirim ke browser. Nah petugas yang disuruh mengirimkan HTML itulah yang akan menangi pengiriman HTML tadi. Pertanyaannya Kenapa kok perlu library output? apa nggak boleh kalau tidak pake jasa si den mas Output tadi? Nah ini dia salah satu fasilitas yang ada di framework ini. Fasilitas apakah gerangan? Fasilitas itu dinamakan cache. Anda tahu cache itu apa dan untuk apa? cache itu berfungsi untuk menyimpan data-data yang pernah diakses oleh pengguna yang tersimpan pada folder temporary (sementara) dan fungsinya ketika ada pengguna lain yang mengakses data yang sama maka serangkaian proses yang dilakukan oleh PHP dan Database tidak perlu lagi dikerjakan. Pengguna tadi cukup dilayani dari data yang sudah ada dalam cache tersebut. Source library output tersebut terlihat seperti dibawah ini
view plainprint?

1. <?php defined('SYS') or exit('Access Denied!'); 2. class Output { 3. public $final_output; 4. public $cache_expiration = 0; 5. public $headers = array(); 6. public $enable_profiler = FALSE; 7. public $parse_exec_vars = TRUE; 8. 9. public function __construct() 10. { 11. //log_message('debug', "Output Class Initialized"); 12. } 13. 14. public function get_output() 15. { 16. return $this->final_output; 17. } 18. public function set_output($output) 19. { 20. $this->final_output = $output; 21. } 22. 23. public function append_output($output) 24. { 25. if ($this->final_output == '') 26. { 27. $this->final_output = $output; 28. } 29. else 30. { 31. $this->final_output .= $output; 32. } 33. } 34. 35. public function set_header($header, $replace = TRUE)

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91.

{ $this->headers[] = array($header, $replace); } public function set_status_header($code = 200, $text = '') { set_status_header($code, $text); } public function enable_profiler($val = TRUE) { exit('Profiler Class Not Implemented Yet ! Use this->db->last_query() for now.'); $this->enable_profiler = (is_bool($val)) ? $val : TRUE; } public function cache($time) { $this->cache_expiration = ( ! is_numeric($time)) ? 0 : $time; } public function _display($output = '') { if ($output == '') { $output =& $this->final_output; } if ($this->cache_expiration > 0) { $this->_write_cache($output); } $elapsed = common::register('Benchmark')>elapsed_time('total_execution_time_start', 'total_execution_time_end'); $output = str_replace('0.0182', $elapsed, $output); $memory = ( ! function_exists('memory_get_usage')) ? '0' : round(memory_get_usage()/1024/ 1024, 2).' MB'; $output = str_replace('1.77 MB', $memory, $output); /* if ($this->parse_exec_vars === TRUE) { $memory = ( ! function_exists('memory_get_usage')) ? '0' : round(memory_get_usage( )/1024/1024, 2).'MB'; $output = str_replace('0.0182', $elapsed, $output); $output = str_replace('1.77 MB', $memory, $output); } */ // -------------------------------------------------------------------// Is compression requested? /*if (common::config_item('compress_output', 'cache') === TRUE) { if (extension_loaded('zlib')) { if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) AND strpos($_SERVER['HTTP_ACCEPT_E NCODING'], 'gzip') !== FALSE) { // Obullo changes .. ini_set('zlib.output_compression_level', config_item('compression_level', 'cache')); ob_start('ob_gzhandler'); } } } */

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. $path;

if (count($this->headers) > 0) { foreach ($this->headers as $header) { @header($header[0], $header[1]); } } if ( ! function_exists('this')) { echo $output; //log_message('debug', "Final output sent to browser"); //log_message('debug', "Total execution time: ".$elapsed); return TRUE; } if ($this->enable_profiler == TRUE) { $profiler = base::register('Profiler'); if (preg_match("|</body>.*?</html>|is", $output)) { $output = preg_replace("|</body>.*?</html>|is", '', $output); $output .= $profiler->run(); $output .= '</body></html>'; } else { $output .= $profiler->run(); } } $ob = base::getInstance(); if (method_exists($ob, '_output')) { $ob->_output($output); } else { echo $output; // Send it to the browser! } //log_message('debug', "Final output sent to browser"); //log_message('debug', "Total execution time: " . $elapsed); } public function _write_cache($output) { $OB = base::getInstance(); //$path = common::config_item('cache_path', 'cache'); $cache_path = APP.'cache'.DS; //= ($path == '') ? APP.'system'.DS.'cache'.DS :

141. 142. 143. 144. 145. 146. 147. 148. >uri_string(); 149. 150.

if ( ! is_dir($cache_path) OR ! common::is_really_writable($cache_path)) { throw new Exception('Unable to write cache file: '.$cache_path); return; } $uri = $OB->config->item('base_url').$OB->config->item('index_page').$OB->uri-

$cache_path .= md5($uri);

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

151. if ( ! $fp = @fopen($cache_path, FOPEN_WRITE_CREATE_DESTRUCTIVE))//FOPEN_WRITE_ CREATE_DESTRUCTIVE)) 152. { 153. throw new Exception('Unable to write cache file: '.$cache_path); 154. return; 155. } 156. $expire = time() + ($this->cache_expiration * 60); 157. 158. if (flock($fp, LOCK_EX)) 159. { 160. fwrite($fp, $expire.'TS--->'.$output); 161. flock($fp, LOCK_UN); 162. } 163. else 164. { 165. throw new Exception('Unable to secure a file lock for file at: '.$cache_path); 166. return; 167. } 168. fclose($fp); 169. @chmod($cache_path, DIR_WRITE_MODE); 170. 171. //log_message('debug', "Cache file written: ".$cache_path); 172. } 173. public function _display_cache(&$URI) 174. { 175. //$cache_path = (common::config_item('cache_path', 'cache') == '') ? APP.'syste m'.DS.'cache'.DS : common::config_item('cache_path', 'cache'); 176. $cache_path = APP.'cache'.DS; 177. // Build the file path. The file name is an MD5 hash of the full URI 178. $uri = common::config_item('base_url'). 179. common::config_item('index_page').$URI->uri_string; 180. 181. $filepath = $cache_path . md5($uri); 182. 183. if ( ! @file_exists($filepath)) 184. { 185. return FALSE; 186. } 187. 188. if ( ! $fp = @fopen($filepath, "r")) 189. { 190. return FALSE; 191. } 192. 193. flock($fp, LOCK_SH); 194. 195. $cache = ''; 196. if (filesize($filepath) > 0) 197. { 198. $cache = fread($fp, filesize($filepath)); 199. } 200. 201. flock($fp, LOCK_UN); 202. fclose($fp); 203. 204. // Strip out the embedded timestamp 205. if ( ! preg_match("/(d+TS--->)/", $cache, $match)) 206. { 207. return FALSE; 208. }

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227.

// Has the file expired? If so we'll delete it. if (time() >= trim(str_replace('TS--->', '', $match['1']))) { if (common::is_really_writable($cache_path)) { @unlink($filepath); //log_message('debug', "Cache file has expired. File deleted"); return FALSE; } } // Display the cache $this->_display(str_replace($match['0'], '', $cache)); //log_message('debug', "Cache file is current. Sending it to browser."); return TRUE; } }//end class ?>

3. Config Library Library config atau singkatan dari configuration berfungsi untuk membaca konfigurasi sistem. Pada umumnya library ini berfungsi untuk membaca konfigurasi sistem yang ada pada folder application/config Source code library Config ini ada dibawah ini
view plainprint?

1. <?php defined('SYS') or exit('Access Denied!'); 2. class Config { 3. public $config = array(); 4. public $is_loaded = array(); 5. 6. public function __construct() 7. { 8. $this->config = common::get_config(); 9. } 10. 11. public function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE) 12. { 13. $file = ($file == '') ? 'config' : str_replace(EXT, '', $file); 14. 15. if (in_array($file, $this->is_loaded, TRUE)) 16. { 17. return TRUE; 18. } 19. 20. if ( ! file_exists(APP .'config'. DS .$file. EXT)) 21. { 22. if ($fail_gracefully === TRUE) 23. { 24. return FALSE; 25. } 26. 27. throw new Exception('The configuration file '.$file. '.PHP does not exist.'); 28. } 29. 30. include(APP .'config'. DS .$file. EXT);

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

31. 32. 33. 34. 35. 36. 37. 38. 39.

if ( ! isset($config) OR ! is_array($config)) { if ($fail_gracefully === TRUE) { return FALSE; }

throw new Exception('Your '.$file. '.PHP file does not appear to contain a valid c onfiguration array.'); 40. } 41. 42. if ($use_sections === TRUE) 43. { 44. if (isset($this->config[$file])) 45. { 46. $this->config[$file] = array_merge($this->config[$file], $config); 47. } 48. else 49. { 50. $this->config[$file] = $config; 51. } 52. } 53. else 54. { 55. $this->config = array_merge($this->config, $config); 56. } 57. 58. $this->is_loaded[] = $file; 59. unset($config); 60. 61. //log_message('debug', 'Config file loaded: config/'.$file.EXT); 62. return TRUE; 63. } 64. 65. public function item($item, $index = '') 66. { 67. if ($index == '') 68. { 69. if ( ! isset($this->config[$item])) 70. { 71. return FALSE; 72. } 73. 74. $pref = $this->config[$item]; 75. } 76. else 77. { 78. if ( ! isset($this->config[$index])) 79. { 80. return FALSE; 81. } 82. 83. if ( ! isset($this->config[$index][$item])) 84. { 85. return FALSE; 86. } 87. 88. $pref = $this->config[$index][$item]; 89. } 90.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

91. return $pref; 92. } 93. public function slash_item($item) 94. { 95. if ( ! isset($this->config[$item])) 96. { 97. return FALSE; 98. } 99. 100. $pref = $this->config[$item]; 101. 102. if ($pref != '' && substr($pref, -1) != '/') 103. { 104. $pref .= '/'; 105. } 106. 107. return $pref; 108. } 109. public function site_url($uri = '') 110. { 111. if (is_array($uri)) 112. { 113. $uri = implode('/', $uri); 114. } 115. 116. if ($uri == '') 117. { 118. return $this->slash_item('base_url').$this->item('index_page'); 119. } 120. else 121. { 122. $suffix = ($this->item('url_suffix') == FALSE) ? '' : $this>item('url_suffix'); 123. return $this->slash_item('base_url').$this>slash_item('index_page').preg_replace("|^/*(.+?)/*$|", "", $uri).$suffix; 124. } 125. } 126. public function set_item($item, $value) 127. { 128. $this->config[$item] = $value; 129. } 130. 131. } 132. 133. ?>

4. Benchmark

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Benchmark ini seperti dibilang penting juga penting dibilang tidak perlu digunakan juga tidak ada masalah. Library ini hanya berfungsi untuk menghitung waktu komputasi berapa lama waktu si server untuk melayani sebuah permintaan dan berapa Mega Byte memory yang dibutuhkan oleh si server untuk melayani permintaan tersebut. Pada website blogkomputer.com, waktu komputasi dan kebutuhan resource memory bisa anda lihat pada footer yang gambarnya terlihat seperti disamping ini. Sedangkan source code dari library benchmark ini bisa anda lihat dibawah ini.
view plainprint?

1. <?php defined('SYS') or exit('Access Denied!'); 2. class Benchmark { 3. 4. var $marker = array(); 5. function mark($name) 6. { 7. $this->marker[$name] = microtime(); 8. } 9. function elapsed_time($point1 = '', $point2 = '', $decimals = 4) 10. { 11. if ($point1 == '') 12. { 13. return '0.0182'; 14. } 15. 16. if ( ! isset($this->marker[$point1])) 17. { 18. return ''; 19. } 20. 21. if ( ! isset($this->marker[$point2])) 22. { 23. $this->marker[$point2] = microtime(); 24. } 25. 26. list($sm, $ss) = explode(' ', $this->marker[$point1]); 27. list($em, $es) = explode(' ', $this->marker[$point2]); 28. 29. return number_format(($em + $es) - ($sm + $ss), $decimals); 30. } 31. function memory_usage() 32. { 33. return '1.77 MB'; 34. }

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

35. 36. } 37. ?>

Sampai disini artikel tentang pembuatan library utama (core) ini selesai kita bahas. Ingat secara default kelima library ini akan terus menerus dipanggil oleh sistem. Oleh karena itu selain sistem core dan sistem database, kelima library ini wajib ada dalam framework kita. Tole : Lho..kok hanya 4 library pakdhe? kan kurang satu padahal sampean kan bilang 5 to? Pakdhe : Iya nomornya sengaja pakdhe bikin sampe 4 saja tole, trus yang satunya lagi mana? lha itu coba sampean lihat pembahasan sub bab 1. Kan pakdhe tulis Uri dan Routing. Itu sengaja dua library tapi pakdhe bahas jadi satu :) Tole : ealah...tau gitu kenapa nggak dibikin jadi dua sub bab saja pakdhe? Pakdhe : memang sengaja kok pakdhe tulis gitu..biasalah kan pakdhe suka iseng, makanya kalo sampean bingung kan berarti pakdhe jadi tambah puas..puas..puas...:)) Tole : o...dasar semprul..sontoloyo...

Tutorial Membangun Sistem Helper


Helper itu apa sih? Pembaca sering naik bis atau angkot atau kendaraan umum yang lain? biasanya kalau ada orang yang kerjaan teriak-teriak di sebelahnya sopir itu namanya helper atau kalau lidah orang Indonesia menyebutnya kenek. Dalam framework kira-kira fungsi helper kurang lebih seperti yang sudah saya sebutkan diatas. Hanya saja bedanya kalau kenek itu wujudnya manusia kalau helper dalam framework itu bentuknya function. Jadi si den bagus Helper itu berfungsi sebagai alat bantu jikalau dibutuhkan oleh sang programmer. Tole : Halah...belum-belum pakdhe ini sudah bikin bingung orang. Mbokyao tu nde poin gitu kalo menjelaskan sesuatu itu...pakek istilah kenek..sopir..apa itu maksudnya? emang becak sampean ada keneknya to? Pakdhe : ya itu kan sekedar ilustrasi saja Tole...dan korban contohnya pak Sopir dan om Kenek haha...Seperti biasa kalo tole tambah bingung kan pakdhe jadi tambah puasss...puasss..puasss..hahahaiii... Tole : ooo...blaiiik..blaiik...bener-bener sotoloyo sampean itu pakdhe. Awas yo sekali lagi sampean bikin bingung saya, ntar lama-lama sampean tak jual kiloan lho. Emang sampean mau kalau sampean tak jual ke tukang rosokan besi tua? huehehe...

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

OK. to the point saja, ayo mari monggo alias kita mulai bahas apa dan bagaimana keberadaan kedua helper tersebut. 1. View Helper

View helper, sesuai dengan namanya adalah berupa fungsi yang bertugas untuk memanggil dan menampilkan View. Anda sudah paham view? view itu ya template (script) HTML anda. Ingat, konsep MVC adalah Model View Controller..masih ingat kan? apa fungsinya Model? dan apa fungsinya Controller? kalau anda lupa, coba anda baca lagi di artikel saya yang pertama (Tutorial Membangun Sistem Core). Pada framework becak ini aturan main penempatan view terlihat seperti gambar disamping. Aturanaturannya seperti berikut ini :
1. 2. Jika template HTML disimpan pada folder application/views maka template tersebut adalah view utama, atau induk HTML pada keseluruhan aplikasi (Lihat gambar nomor 1, lingkaran merah) Jika template HTML disimpan pada folder application/directories/[nama apliksi] /views maka template tersebut adalah sub view, atau sub bagian view dari view utama( Lihat gambar nomor 2, lingkaranan hijau)

Lho kenapa kok ada banyak view? bukannya kalau hanya ada satu view seperti CodeIgniter akan jauh lebih sederhana? Sudah saya singgung pada pembahasan terdahulu bahwa framework ini mendukung banyak aplikasi dalam satu framework. Ini artinya apa? dalam satu framework diijinkan pula terdapat banyak view. Ada banyak pilihan dalam hal ini. Pilihannya apa saja?

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Pilihan pertama: pada masing-masing aplikasi website pada folder di application/directories, diijinkan mempunyai tampilan (view) sendiri-sendiri dan antara view aplikasi satu dengan yang lain tidak saling berkaitan. ini artinya view yang ada seharusnya sejumlah aplikasi yang ada. Pilihan yang kedua: sangat dimungkinkan keseluruhan aplikasi mempunyai template induk tampilan yang sama. Misalnya saya ambil studi kasus begini, ada sebuah Universitas X yang memiliki 5 Fakultas, dimana masing-masing fakultas mempunyai aplikasi website sendiri-sendiri. Akan tetapi ada syarat tambahan, misalnya Pak Rektor menginginkan tampilan website antar fakultas tersebut seragam dan hanya content-nya saja yang berubah disesuaikan dengan informasi dari fakultasya. Nah kalau kita menemui kasus seperti ini, maka lebih baik kita sediakan satu buah template yang diletakkan di folder application/views dan nantinya sub view ini akan disisipkan pada view utama. OK. Gini sajalah..daripada tambah bingung, sudahlah ini saya copy-paste source-codenya dulu saja ya..
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.

<?php defined('SYS') or exit('Access Denied!'); /* * Becak MVC Framework version 1.0 * * File : view_helper.php * Directory : system/helpers * Author : Eko Heri Susanto * Description : fungsi untuk memuat (loaded) view atau user interface */ function app_view($view_name, $arr_data = array(), $return_string=false){ $file = APP . 'views'. DS . $view_name . PHP_EXT; return _view($file, $arr_data, $return_string); }//end view function view($view_name, $arr_data = array(), $return_string=true){ $file = DIR.$GLOBALS['d'] .DS. 'views'. DS . $view_name . PHP_EXT; return _view($file, $arr_data, $return_string); } function app_script($filename, $data = '') { return _script(APP .'scripts'. DS, $filename, $data); } function script($filename, $data = '') { return _script(DIR .$GLOBALS['d']. DS .'scripts'. DS, $filename, $data); } function _view($file, $arr_data = array(), $return_string){ if (!file_exists($file)) throw new Exception("Can't load template file: " . $file); if(sizeof($arr_data) > 0) extract($arr_data, EXTR_SKIP); ob_start(); include ($file); if($return_string){ $content = ob_get_contents(); @ob_end_clean(); return $content; } common::register('Output')->append_output(ob_get_contents()); @ob_end_clean(); return;

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63.

} function _script($path, $filename, $data = '') { if( emptyempty($data) ) $data = array(); if ( ! file_exists($path . $filename . PHP_EXT) ) { throw new Exception('Unable locate the script file: '. $path . $filename . PHP_EXT); } if(sizeof($data) > 0) { extract($data, EXTR_SKIP); } ob_start(); include($path . $filename . PHP_EXT); $content = ob_get_contents(); ob_end_clean(); return " ".$content; } ?>

2. Head_Tag Helper Bagi anda yang sudah terbiasa dengan script HTML, pastinya anda sudah tidak asing dengan istilah head tag bukan? head itu artinya kepala, dan tag artinya tanda pengenal. Jadi kalau diartikan secara keseluruhan head tag adalah tanda pengenal di kepala. Jadi bagi anda yang tambah bingung setelah membaca artikel ini, saya sarankan untuk memasang tanda pengenal di kepala anda sendiri-sendiri. Caranya bagaimana? coba anda buat tulisan yang besar-besar di kertas karton, bunyi tulisannya begini "TOLONG, SAYA SEDANG BINGUNG". Jika sudah selesai bikin tulisan, maka kertas karton tadi anda bentuk sedemikian rupa sehingga menyerupai topi. Selanjutnya saya sangat menyarankan pakai topi tadi untuk jalan-jalan ke pasar atau ke mall sambil berdoa mudah-mudahan ada orang lain yang bersedia menolong anda. Good luck, selamat mencoba :D Kalau di HTML yang dimaksud head tag itu adalah tanda pengenal seperti misalnya meta keyword, description, author ataupun mungkin style, script dan lain sebagainya. head tag ini pada umumnya dituliskan pada bagian head pada script HTML anda. Oleh karena itu tanda-tanda pengenal ini dinamakan head tag. Fungsi dari helper head_tag itu sendiri sebenarnya hanyalah untuk menyederhanakan penulisan head tag agar pengembang aplikasi website tidak capek-capek lagi ngetik script head tag yang panjang lebar, sepanjang dan selebar jembatan Suramadu. Source codenya bisa anda lihat dibawah ini
view plainprint?

1. <?php defined('SYS') or exit('Access Denied!'); 2. function css($filename, $path = 'css', $title = '', $media = '') 3. { 4. if( ! is_array($filename)) 5. $filename = array($filename); 6. 7. /*$_cont = base::getInstance();

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66.

if(isset($_cont->_ent->css_folder{1})) { $path = $path . $_cont->_ent->css_folder; }*/ $url = base::getInstance()->config->slash_item('source_url').'css'; $style = ''; foreach($filename as $key => $css) { $style .= " ".link_tag($url.'/'.$css, 'stylesheet', 'text/css', $title, $media); } return $style; } function js($filename, $arguments = '', $type = 'text/javascript') { if( ! is_array($filename)) $filename = array($filename); $url = base::getInstance()->config->slash_item('source_url').'js/'; $js = ''; foreach($filename as $key => $file) { $js.= " ".'<script type="'.$type.'" src="'.$url.$file.'" '.$arguments.'></script>'; } return $js; } function meta($name = '', $content = '', $type = 'name', $newline = " ") { if ( ! is_array($name)) { $name = array(array('name' => $name, 'content' => $content, 'type' => $type, 'newline' => $newline)); } else { // Turn single array into multidimensional if (isset($name['name'])) { $name = array($name); } } $str = ''; foreach ($name as $meta) { $type = ( ! isset($meta['type']) OR $meta['type'] == 'name') ? 'name' : 'httpequiv'; $name = ( ! isset($meta['name'])) ? '' : $meta['name']; $content = ( ! isset($meta['content'])) ? '' : $meta['content']; $newline = ( ! isset($meta['newline'])) ? " " : $meta['newline']; $str .= '<meta '.$type.'="'.$name.'" content="'.$content.'" />'.$newline;

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

67. } 68. 69. return $str; 70. } 71. function link_tag($href = '', $rel = 'stylesheet', $type = 'text/css', $title = '', $media = ' ', $index_page = FALSE) 72. { 73. $OB = base::getInstance(); 74. 75. $link = '<link '; 76. 77. if (is_array($href)) 78. { 79. foreach ($href as $k=>$v) 80. { 81. if ($k == 'href' AND strpos($v, '://') === FALSE) 82. { 83. if ($index_page === TRUE) 84. { 85. $link .= ' href="'.$OB->config->site_url($v).'" '; 86. } 87. else 88. { 89. $link .= ' href="'.$OB->config->slash_item('base_url').$v.'" '; 90. } 91. } 92. else 93. { 94. $link .= "$k="$v" "; 95. } 96. } 97. 98. $link .= "/>"; 99. } 100. else 101. { 102. if ( strpos($href, '://') !== FALSE) 103. { 104. $link .= ' href="'.$href.'" '; 105. } 106. elseif ($index_page === TRUE) 107. { 108. $link .= ' href="'.$OB->config->site_url($href).'" '; 109. } 110. else 111. { 112. $link .= ' href="'.$OB->config->slash_item('base_url').$href.'" '; 113. } 114. 115. $link .= 'rel="'.$rel.'" type="'.$type.'" '; 116. 117. if ($media != '') 118. { 119. $link .= 'media="'.$media.'" '; 120. } 121. 122. if ($title != '') 123. { 124. $link .= 'title="'.$title.'" '; 125. } 126.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

127. 128. 129. 130. 131. 132.

$link .= '/>'; } return $link; } ?>

Pertanyaan terakhir, helper ini cara manggilnya gimana? coba anda buka lagi class Global Controller pada artikel Tutorial Membangun Sistem Core. Untuk lebih jelasnya lihat gambar dibawah ini.

Perintah loader::sys_helper("view") dan loader::sys_helper("head_tag") seperti yang terlihat pada lingkaran nomor 1 (warna hijau) inilah yang menandai proses pemanggilan helper view dan head_tag. Kemudian setelah helper tersebut dipanggil, bagaimana cara mengeksekusi fungsi-fungsinya? untuk menampilkan meta content-type dan author dapat anda lihat pada lingkaran nomor 2 (warna merah) pada gambar diatas. Sedangkan pemanggilan head tag javascript dan CSS bisa anda lihat pada gambar dibawah lingkaran nomor 1 (warna merah). Pemanggilan sub view bisa anda lihat pada gambar dibawah lingkaran nomor 2 (warna hijau). Sedangkan pemanggilan view utama dapat dilihat pada lingkaran nomor 3 (warna kuning)

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Sampai disini penulisan artikel helper inti (utama) sudah selesai. Sekali lagi kalau anda tambah bingung maka saya merasa sangat puass...puass..puass!!!. Ini artinya apa? semakin anda merasa bingung, berarti semakin besar keinginan anda untuk belajar. Dan semakin besar keinginan anda untuk belajar maka anda semakin pintar.

Uji Coba Becak HMVC Framework


Setelah berhari-hari, berbulan-bulan dan bertahun-tahun kita berkutat dengan cara pembuatan framework MVC, sekarang sudah saatnya kita menguji coba framework yang baru saja kita bikin kemarin. Tentunya seluruh pembaca yang baik hati dan tidak sombong, sudah memahami apa itu sistem inti (core), sistem database, sistem library dan sistem helper yang sudah saya bahas pada artikel saya tempo hari. Untuk saat ini kita coba berkutat pada Sistem Application. Anda masih ingat kan? apa itu sistem application? sistem aplication adalah aplikasi web site yang dikembangkan oleh developer website. Jadi pekerjaan utama anda sebagai pengembang website, yang memanfaatkan framework becak made in Pakdhe Sakiyun ini...ya diletakkan di sistem application ini.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Susunan folder sistem aplikasi ini dapat anda lihat pada gambar disamping kanan ini. Coba kita bahas satu persatu 1. Configuration. Dapat anda lihat letak konfigurasi berada pada folder application/config. Disitu terdapat 3 file konfigurasi yaitu config.php, database.php dan routes.php. Lihat lingkaran nomor 1 (warna merah). Apa dan bagaimana konfigurasi tersebut? nanti akan saya jelaskan di sub bab 1 pada artikel ini. 2. Global Controller. Global Controller sudah saya terangkan di artikel saya yang pertama (membangun sistem core). Lokasi global controller ini berapa pada folder application/globals. Lihat lingkaran nomor 2 (warna kuning). Global controller ini akan kembali saya ulas pada sub bab 2 pada artikel ini. 3. View Base. View base adalah tampilan dasar dari aplikasi web site kita. Dengan adanya view base ini maka semua aplikasi tampilannya bisa kita standarisasikan. Lokasi view base ini terletak pada folder application/views. Lihat lingkaran nomor 3 (warna hijau). Nantinya akan saya jelaskan lebih lanjut pada sub bab 3 pada artikel ini. 4. Aplikasi kita. Sudah saya jelaskan sebelumnya bahwa secara garis besar aplikasi yang kita buat terdiri dari tiga bagian utama yaitu controller, view dan model. lokasi aplikasi kita ini terletak pada folder application/directories. Pada contoh uji coba kali ini sengaja saya membuat folder welcome (Lihat lingkaran nomor 4, warna hijau). Untuk selanjutnya aplikasi yang kita buat nantinya dinamakan welcome, sesuai dengan nama folder aplikasinya. Nah didalam folder welcome itulah nantinya kita bisa menyimpan aplikasi controller, model dan view. Selain ketiga bagian tersebut (controller, model, view)

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

dalam aplikasi tersebut bisa juga kita tambahkan scripts (untuk menyimpan program-program javascript) dan helpers (untuk menyimpan aplikasi helper buatan kita sendiri/yang tidak disediakan oleh framework). Bagaimana pembuatan controller, view dan script akan saya jelaskan lebih lanjut pada sub bab 4.1, sub bab 4.2 dan sub bab 4.3 pada artikel ini.

Selain keempat bagian utama tersebut, kadangkala dalam membangun sebuah website kita membutuhkan sources tambahan. Misalkan CSS (Cascade Style Sheet), JS (javascript), gambar (image), jenis-jenis huruf (font) dan lain sebagainya. Oleh karena itu sources (kebutuhan) tambahan tersebut dalam framework ini telah diorganisir pada folder sources. Untuk lebih jelasnya lihat gambar disamping kiri. Dalam folder source ini, terdapat 3 sub folder yaitu css, images dan js. Nantinya kebutuhan tambahan yang sudah saya jelaskan diatas akan disimpan dalam folder-folder ini(lihat lingkaran warna merah). dapat anda lihat folder css berisi file-file untuk pengaturan tampilan website kita atau yang lebih dikenal dengan nama Cascade Style Sheet (CSS). Sedangkan pada folder js berisi file-file program javascript. Program javascript yang ada di folder ini nantinya berbeda dengan program javascript yang dideklarasikan pada folder application/directories/welcome/scripts diatas. Perbedaannya dimana? nanti di sub bab ke 5 akan saya jelaskan lebih lanjut serta saya sertakan contoh source code-nya. Jika anda membutuhkan jenis tulisan (font) khusus, maka bisa saja menambahkan folder font pada sources tersebut. Tole Dulkamit : "Pakdhe..pakdhe, tak lihat sepintas cara memanfaatkan framework sampean ini kok rumit ya? apa karena HMVC itu ya pakdhe?" Pakdhe Sakiyun : "Sebenarnya tidak rumit Tole. Terlihat rumit itu kan karena kita belum terbiasa. Nanti kalo sudah terbiasa kan malah kerasa lebih terstruktur programnya. Dan tentu saja kita akan lebih mudah dalam proses pembuatan dan perawatan aplikasi kita..Tole. Tole Dulkamit : "O..gitu ya pakdhe, coba dulu saya simak dongengan pakdhe Sakiyun dulu deh kalo begitu"

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

OK. Kita mulai dengan Konfigurasi dulu. Konfigurasi ini sangat sepele tapi kalo kita lupa kadang bikin puyeng hehe...

1. Konfigurasi(Config)
1.1 config.php Config.php ini berisi konfigurasi url dasar (base_url), url source (source_url), pengaturan nama page index dan lain sebagainya. Untuk lebih jelasnya source code-nya bisa anda copy-paste dibawah ini. Dan jangan lupa disimpan pada folder application/config seperti yang sudah saya jelaskan diatas.
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.

<?php defined('SYS') or exit('Access Denied!'); /* Isi 0 atau 1. Jika sudah online ganti dengan 0 */ $config['display_errors'] = 1; /** | @see http://php.net/manual/en/function.date-default-timezone-set.php | @link http://www.php.net/manual/en/timezones.php */ $config['timezone_set'] = 'Asia/Jakarta'; $config['base_url'] = 'http'.((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == ' on') ? 's' : '').'://'.$_SERVER['HTTP_HOST'].str_replace('//','/',dirname($_SERVER['SCRIPT_NAM E']).'/'); $config['source_url'] = $config['base_url']."/sources/"; $config['index_page'] = "index.php"; $config['uri_protocol'] = "AUTO"; $config['url_suffix'] = ""; $config['language'] = "english"; $config['charset'] = "UTF-8"; $config['subclass_prefix'] = 'MY_'; $config['permitted_uri_chars'] = 'a-z 0-9~%.:_-'; $config['enable_query_strings'] = FALSE; $config['directory_trigger'] = 'd'; $config['controller_trigger'] = 'c'; $config['function_trigger'] = 'm'; $config['log_threshold'] = 0; $config['log_path'] = ''; $config['log_date_format'] = 'Y-m-d H:i:s'; $config['encryption_key'] = ""; $config['sess_cookie_name'] = 'becak_session'; $config['sess_expiration'] = 7200; $config['sess_encrypt_cookie'] = FALSE; $config['sess_driver'] = 'cookie'; // or database $config['sess_db_var'] = 'db'; $config['sess_table_name'] = 'becak_sessions'; $config['sess_match_ip'] = FALSE; $config['sess_match_useragent'] = TRUE; $config['sess_time_to_update'] = 300; $config['cookie_prefix'] = ""; $config['cookie_domain'] = ""; $config['cookie_path'] = "/"; $config['cookie_time'] = (7 * 24 * 60 * 60); $config['global_xss_filtering'] = FALSE;

14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

44. $config['time_reference'] 45. $config['proxy_ips'] 46. ?>

= 'local'; = '';

1.2 routes.php Routes.php ini berfungsi untuk mengatur mana aplikasi default yang akan tampil ketika pengunjung website kita mengetikkan alamat URL website kita tanpa ada parameter apapun (misalnya :http://blogkomputer.com). Seperti sudah saya jelaskan diartikel sebelumnya, framework ini mendukung banyak aplikasi. Akan tetapi ketika ada pengunjung yang mengakses halaman depan (page index) maka tentunya hanya ada 1 (satu) aplikasi default yang akan dijalankan. Konfigurasi routes.php ini terlihat seperti contoh dibawah ini.
view plainprint?

1. 2. 3. 4. 5.

<?php defined('SYS') or exit('Access Denied!'); $routes['default_controller'] = "welcome/page"; $routes['index_method'] = "index"; ?>

2. global_controller.php
Sudah saya singgung di bagian awal artikel (membangun sistem core) bahwa global controller berisi deklarasi variable atau konstanta yang bersifat umum (general). Source dari global controller ini bisa anda lihat dibawah ini. Jangan lupa copy-kan file global_controller.php ini ke folder application/globals.
view plainprint?

1. <?php defined('SYS') or exit('Access Denied!'); 2. class global_controller extends base { 3. public $base, $base_url, $base_img; 4. public $title, $head, $meta; 5. public function __construct(){ 6. parent::__construct(); 7. loader::sys_helper('view'); 8. loader::sys_helper('head_tag'); 9. $this->base = common::config_item('base_url'); 10. $this>base_url = common::config_item('base_url') . common::config_item('index_page'); 11. $this->base_img = common::config_item('source_url').'images/'; 12. $this->meta = meta('Content-type', 'text/html; charset=utf-8', 'equiv'); 13. $this->meta .= meta('author', 'Eko Heri Susanto'); 14. } 15. } 16. ?>

3. base view
Berikut ini adalah source code HTML yang merupakan view dasar (base view) dari keseluruhan aplikasi website kita. Pembuatan view dasar ini sebenarnya tidak diwajibkan. Hanya saja jika kita pengembang

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

website membutuhkan tampilan yang bersifat umum dan standar, maka pemanfaatan view dasar ini sangat dibutuhkan. Jangan lupa copy-paste di filder application/views dan simpan dengan nama view_base.php
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.

<html> <head> <?php echo this()->meta; ?> <title><?php echo this()->title; ?></title> <base href="<?php echo this()->base; ?>" /> <?php this()->head .= css('welcome.css'); echo this()->head; ?> </head> <body> <h1>Welcome to Becak MVC Framework</h1> <?php echo this()->body; ?> <p>Page rendered in {elapsed_time} seconds using {memory_usage} of memory</p> </body> </html>

4. Application
4.1 Controller Inilah source sederhana controller kita. Jangan lupa copy-paste ke folder application/directories/welcome/controllers, simpan dengan nama file page.php.
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.

<?php defined('SYS') or exit('Access Denied!'); class page extends controller { function __construct(){ parent::__construct(); } function index(){ $this->title = 'Welcome to Becak MVC Framework !'; $this->meta .= meta('keywords', 'becak, php5, framework'); $this->head .= css('welcome.js'); $this->head .= script('welcome'); $data['var'] = 'This page generated by Becak MVC Framework.'; $this->body = view('view_welcome', $data);

app_view('view_base'); } } ?>

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

4.2 View Sedangkan source code tampilan (view) kita terlihat seperti dibawah ini. Jangan lupa copy-paste ke folder application/directories/welcome/views, simpan dengan nama file view_welcome.php.
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.

<p><?php echo $var;?></p>

<p></p> <p>If you would like to edit this page you'll find <b>View</b> located at:</p> <code>application/directories/welcome/views/view_welcome.php</code> <p>The corresponding <b>Controller</b> for this page is found at:</p> <code>application/directories/welcome/controllers/page.php</code> <p>The corresponding <b>Global controller</b> for this page is found at:</p> <code>application/globals/global_controller.php</code> <code> <input type="button" onclick="test_me();" value="Script Test !"/> </code> <p>The corresponding <b>Script</b> file for this page is found at:</p> <code>application/directories/welcome/scripts/welcome.php</code> <p>The corresponding <b>Global View</b> file for this page is found at:</p> <code>application/views/view_base.php</code>

4.3 Script Sebagai tambahan, ini juga saya contohkan bagaimana membuat javascript sederhana. Dimana javascript ini tersimpan dalam folder application/directories/welcome/scripts dengan nama filewelcome.php.
view plainprint?

1. <script type="text/javascript" language="Javascript"> 2. 3. // We load inline javascript files as views 4. // we will build it in <head> tags 5. 6. function test_me() 7. { 8. alert('Hello World ! This is the my site base url <?php echo this()->base; ?> '); 9. return false; 10. } 11. 12. 13. </script>

5 Sources
5.1 css

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Nah..ini dia yang terakhir kita akan buat CSS untuk mempermanis tampilan website kita. Jangan lupa file css ini disimpan dalam folder sources/css dengan nama file welcome.css
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.

* { margin: 0px; padding: 0px; } html, body { height: 100%; font-family: arial; }

body { background-color: #fff; margin: 40px; font-family: Arial; font-size: 14px; color: #000; } a { color: #003399; background-color: transparent; font-weight: normal; } h1 { color: #808080; background-color: transparent; border-bottom: 1px solid #D0D0D0; font-size: 25px; font-weight: bold; margin: 24px 0 2px 0; padding: 5px 0 6px 0; } code { font-family: Monaco, Verdana, Sans-serif; font-size: 14px; background-color: #f9f9f9; border: 1px dotted #D0D0D0; color: #969696; display: block; margin: 14px 0 14px 0; padding: 12px 10px 12px 10px; font-weight: bold; }

Sampai disini serangkaian pembuatan aplikasi uji coba sudah selesai kita kerjakan. Nah ini dia tampilan hasil akhir hasil uji coba tersebut.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Tole Dulkamit : "Pakdhe..pakdhe, kok cuman sampe disini? lah..sampean itu nggak tuntas kalo ngasih dongengan" Pakdhe Sakiyun : "Lho...bentar-bentar..yang kurang mana to Tole?" Tole Dulkamit :"Lha yang uji coba database mana? trus yang nerangin cara bikin script di sources/js mana? kok nanggung gini to pakdhe?" Pakdhe Sakiyun : "Sebentar Tole, sekarang kan banyak hutan-hutan yang gundul. Akbibatnya apa? PLTA banyak yang tidak fungsi..makanya Pakdhe harus irit listrik :-D" Tole Dulkamit : "Halah..sampean ini terlalu banyak alasan, bilang aja males ngetik..." Pakdhe Sakiyun : "Sabar ya Tole, nanti malam kalo pikiran pakdhe lagi fresh, coba tak bikin buku tamu sederhana. Dan ini sudah memanfaatkan database Tole..jadi sabar ya?hehe..." Tole Dulkamit :"O..gitu..tak tunggu lho janjimu Pakdhe..sampek nggak ditulis, awas...jangan salahkan saya kalau ada batu bata melayang dan mengenai bathuksampean...huehehe...becanda pakdhe.." Pakdhe Sakiyun : "Beras..eheheh..beyes..eheheh..becak...eheheh..beres...wani piro??...hehe"

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Uji Coba Sistem Database Becak HMVC Framework


Sesuai dengan janji Pakdhe Sakiyun tempo hari yaitu menguji coba sistem database, maka pada artikel kali ini akan kita bahas bagaimana membuat aplikasi buku tamu (guestbook) sederhana, memanfaatkan operasi database klasik dan PDO (PHP Data Object), yang telah tersedia dalam framework becak. Aplikasi guestbook kita kali ini dilengkapi dengan fasilitas menampilkan data, menambah data, merubah serta menghapus data yang sudah pernah tersimpan di database. Jadi secara keseluruhan 4 operasi dasar database yaitu : SELECT, INSERT, UPDATE dan DELETE akan diuji cobakan. Tole : "Pakdhe..pakdhe, kok ada database klasik segala to?" Pakdhe : "Itu istilah pakdhe aja, gak perlu bingung ya..soalnya kan saat ini den bagus PHP menyediakan beberapa cara untuk koneksi dan mengoperasikan database. Dari dulu sebenarnya PHP sudah menyediakan teknik pengoperasian database dan sampai saat ini masih banyak yang menggunakan. Teknik ini sengaja pakdhe kasih nama klasik karena sudah ada dari jaman dulu kala. Nah sekarang, si PHP menyediakan juga teknik pengoperasian database yang full Object Oriented Pogramming (OOP) dan selanjutnya dinamakan PDO" Tole :"Trus pas nanti kita bikin program apakah ada perbedaan antara database klasik dan PDO pakdhe? Pakdhe :"Tenang saja, khusus untuk framework ini antara yang klasik dan PDO tadi, sudah pakdhe bungkus secara rapi sehingga para pengguna framework ini tidak merasakan perbedaan tata cara pengorasian database-nya Tole..Biar tidak penasaran, coba dengarkan dongengan pakdhe dulu ya.." To nde poin saja ya, pertama-tama (herannya kok tidak ada kosa kata "terakhir-akhir" ya? he..he..), yang harus kita persiapkan tentunya adalah database-nya. Silahkan buka aja phpmyadmin via browser anda, kemudian buat database baru dengan nama coba. Kira-kira proses pembuatan database ini terlihat seperti gambar dibawah ini

Selanjutnya lengkapi database yang barusan kita buat tadi dengan table-nya. Coba silahkan bikin table dengan nama guestbook, seperti terlihat pada script dibawah ini :
view plainprint?

1. CREATE TABLE IF NOT EXISTS `guestbook` ( 2. `id` int(11) NOT NULL AUTO_INCREMENT, 3. `nama` varchar(50) NOT NULL, 4. `email` varchar(50) NOT NULL, 5. `isi` text NOT NULL,

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

6. `tgl_posting` datetime NOT NULL, 7. PRIMARY KEY (`id`) 8. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Nah..sampai disini proses pembuatan database-nya sudah rebes...eeh..beres...selanjutnya mari kita obrak-abrik programnya. Seperti biasa saya bahas dulu susunan folder aplikasinya biar pembaca yang budiman tidak bingung. Sebenarnya tata cara pembuatan folder aplikasi guestbook ini sama saja dengan aplikasi uji coba kita tempo hari. Kalau dalam uji coba tempo hari kita bikin folder welcome dalam folder directories, sekarang kita bikin folder bukutamu. Untuk lebih jelasnya lihat gambar disamping. Sebelum lebih jauh ke pembuatan controller, model dan view, pertama kali yang harus kita kerjakan adalah melakukan konfigurasi database. Coba anda perhatikan lingkaran nomor 1 warna merah pada gambar disamping. Konfigurasi ini mutlak harus kita kerjakan terlebih dahulu agar aplikasi kita dapat terkoneksi ke database. Untuk uji coba yang pertama, kita manfaatkan dulu operasi database klasik nanti kalau aplikasi sudah jadi kita akan uji coba operasi database dengan PDO. Step by step pembuatan aplikasi akan saya bahas dibawah ini.

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

1. Konfigurasi Database Klasik


Silakan buka file database.php pada folder application/config. Atau kalau belum ada filenya, silahkan dibuat terlebih dahulu. Kemudian copas script konfigurasi seperti dibawah ini. Yang harus anda perhatikan pada konfigurasi ini adalah pada baris ke 11 (user), baris ke 14 (password) dan baris ke 17 (database). Pada baris ke 11 bisa anda rubah kalau anda menggunakan user lain untuk koneksi ke mysql. Untuk contoh kali ini sengaja saya gunakan user default bawaan dari mysql yaitu root. Jika mysql anda di-password jangan lupa masukkan password koneksi mysql pada baris ke 14. Sedangkan baris ke-17 adalah nama database yang baru saja kita bikin diatas. Kalau tadi anda tidak menamakan database-nya dengan nama coba, maka anda diwajibkan mengganti nama database tadi sesuai dengan nama database yang anda buat.
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.

<?php $config = array(); // jika ingin menggunakan PDO ubah mejadi 'mysql_pdo' $config['db']['type'] = 'mysql'; // jika anda menggunakan PDO, ubah menjadi '127.0.0.1' $config['db']['server'] = 'localhost'; //sesuaikan dengan user yang ada di database mysql anda $config['db']['user'] = 'root'; //sesuaikan dengan password mysql anda $config['db']['password'] = ''; //sesuaikan dengan nama database yang anda buat $config['db']['database'] = 'coba'; ?>

2. Aplikasi Buku Tamu


Seperti biasa, untuk membuat aplikasi yang perlu kita sediakan adalah Controller, Model dan View terlebih dahulu. Struktur folder-nya bisa anda lihat pada gambar diatas. Satu per satu coba kita bahas ya.. 2.1 Controller Controller kita kali ini sengaja dinamakan page. Oleh karena itu nama filenya juga page.php. Dalam controller ini terdapat 5 fungsi yaitu:l
1. 2. 3. 4. __construct : adalah fungsi konstruktor yang berisi deklarasi perintah yang jalan otomatis ketika pertama kali aplikasi dijalankan index : adalah fungsi default yang akan menampilkan data dan tampilan awal dari aplikasi edit : adalah fungsi yang bertugas menampilkan data yang akan di-edit/dirubah simpan : adalah fungsi yang menangani penyimpanan data, baik itu data baru ataupun data lama yang akan diubah/update

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

5.

hapus : adalah fungsi yang menangani penghapusan data dari database

Adapun script controller page tersebut terlihat seperti dibawah ini


view plainprint?

1. <?php defined('SYS') or exit('Access Denied!'); 2. class page extends controller 3. { 4. public function __construct() 5. { 6. parent::__construct(); 7. loader::model('guestbook_model'); 8. } 9. public function index() 10. { 11. $this->output->cache(1); 12. $data = array( 13. 'id' => '', 14. 'nama' => '', 15. 'email' => '', 16. 'isi' => '', 17. 'tgl_posting' => '', 18. 'status' => 'data_baru', 19. 'daftar_bukutamu' => $this->guestbook_model->GetData() 20. ); 21. echo view("guestbook_view", $data, false); 22. } 23. function edit($id){ 24. $data_lama = $this->guestbook_model->GetData("WHERE id=$id"); 25. $temp = array(); 26. foreach($data_lama as $key => $val){ 27. $temp[$key] = $val; 28. } 29. $data = array( 30. 'id' => $id, 31. 'nama' => $temp[0]['nama'], 32. 'email' => $temp[0]['email'], 33. 'isi' => $temp[0]['isi'], 34. 'tgl_posting' => $temp[0]['tgl_posting'], 35. 'status' => 'edit', 36. 'daftar_bukutamu' => $this->guestbook_model->GetData() 37. ); 38. echo view("guestbook_view", $data, false); 39. } 40. function simpan() 41. { 42. $id = isset($_POST['id']) ? $_POST['id'] : NULL; 43. $nama = isset($_POST['nama']) ? $_POST['nama'] : ''; 44. $email = isset($_POST['email']) ? $_POST['email'] : ''; 45. $isi = isset($_POST['isi']) ? $_POST['isi'] : ''; 46. $status = isset($_POST['status']) ? $_POST['status'] : 'data_baru'; 47. 48. $data = array( 49. 'id' => $id, 50. 'nama' => $nama, 51. 'email' => $email, 52. 'isi' => $isi, 53. 'tgl_posting' => date('Y-m-d H:i:s') 54. ); 55. if($status == 'data_baru'){

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78.

$result = $this->guestbook_model->InsertData($data); if($result==1) { echo "<h2>Sukses Menambah Buku Tamu</h2>"; echo "<p><a href='".this()>base_url."/bukutamu/page'>Kembali ke halaman depan</a></p>"; } } else if($status == 'edit'){ $result = $this->guestbook_model->UpdateData($data, array('id'=> $id)); if($result==1) { echo "<h2>Sukses Merubah Buku Tamunya $nama</h2>"; echo "<p><a href='".this()>base_url."/bukutamu/page'>Kembali ke halaman depan</a></p>"; } }//end if edit }//end simpan function hapus($id){ $result = $this->guestbook_model->DeleteData(array('id'=> $id)); if($result==1) { echo "<h2>Sukses Menghapus Buku Tamu</h2>"; echo "<p><a href='".this()>base_url."/bukutamu/page'>Kembali ke halaman depan</a></p>"; } } } ?>

2.2 Model Sedangkan model kita kali ini dinamakan guestbook_model. Oleh karena itu nama file PHP nya sama dengan nama kelasnya yaitu guestbook_model.php. Terdapat 5 fungsi dalam class model ini yaitu:
1. 2. 3. 4. 5. __construct : adalah konstruktor yang berisi deklarasi perintah untuk me-load sistem database. Sedangkan config yang dibaca adalah db (konfigurasi "db" sudah saya bahas pada sub bab 1 diatas) GetData : bertugas untuk meng-eksekusi perintah SELECT yang berfungsi untuk mengambil data dari database InserData : bertugas meng-eksekusi perintah penyimpanan data baru(INSERT) UpdateData : bertugas untuk mengeksekusi perintah perubahan (UPDATE) data DeleteData : bertugas untuk mengeksekusi perintah penghapusan (DELETE) data

Adapun script model guestbook_model tersebut terlihat seperti dibawah ini


view plainprint?

1. <?php defined('SYS') or exit('Access Denied!'); 2. class guestbook_model extends model { 3. public function __construct(){ 4. loader::database("db"); 5. } 6. function GetData($where=""){ 7. $this->db->select("SELECT * FROM `guestbook` ".$where); 8. return $this->db->fetch_array(); 9. } 10. function InsertData($data){ 11. return $this->db->insert('guestbook', $data); 12. } 13. function UpdateData($data, $where){ 14. return $this->db->update('guestbook', $data, $where);

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

15. 16. 17. 18. 19. } 20. ?>

} function DeleteData($where){ return $this->db->delete('guestbook', $where); }

2.3 View Terakhir yang perlu kita bikin adalah tampilannya (view). View kita kali ini dinamakan guestbook_view.php. Script lengkapnya seperti berikut ini.
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.

39. 40. 41. 42.

<html> <head> <title>Buku Tamu Sederhana</title> </head> <body> <h2>Buku Tamu Sederhana</h2> <h3>Isi Buku Tamu</h3> <form method="POST" action="<?php echo this()->base_url;?>/bukutamu/page/simpan"> <p><input type="text" name="nama" size="40" value="<?php echo $nama;?>" /><label>Nama</label>< /p> <p><input type="text" name="email" size="40" value="<?php echo $email;?>" /><label>Email</labe l></p> <label>Isi</label> <p><textarea name="isi" rows="5" cols="40"><?php echo $isi;?></textarea></p> <input type="hidden" name ="id" value="<?php echo $id;?>" /> <input type="hidden" name ="status" value="<?php echo $status;?>" /> <p><input type="submit" value="simpan"></p> </form> <h3>Daftar Buku Tamu</h3> <table border="1" width="100%" style="border-collapse:collapse;"> <tr> <th>ID</th> <th>Nama</th> <th>Email</th> <th>Isi</th> <th>Tgl Posting</th> <th>Operasi</th> </tr> <?php foreach($daftar_bukutamu as $d) { ?> <tr> <td><?php echo $d['id'];?></td> <td><?php echo $d['nama'];?></td> <td><?php echo $d['email'];?></td> <td><?php echo $d['isi'];?></td> <td><?php echo $d['tgl_posting'];?></td> <td align="center"> <a href="<?php echo this()->base_url.'/bukutamu/page/edit/'.$d['id'];?>">Edit</a> <a href="<?php echo this()>base_url.'/bukutamu/page/hapus/'.$d['id'];?>" onclick="return confirm('Anda yakin akan mengha pus data ini?')">Hapus</a> </td> </tr> <?php }//end foreach

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

43. 44. 45. 46. 47.

?> </table> <p>Waktu komputasi 0.0163 detik. Kebutuhan memory 1.76 MB</p> </body> </html>

Nah..sampai disini aplikasi sebagai bahan uji coba sedah selesai kita buat. Untuk menguji aplikasinya jalan apa tidak coba anda ketik di URL browser seperti ini : http://localhost/becak/index.php/bukutamu/page . Seharusnya kalau anda tidak salah ketik akan muncul program seperti terlihat pada gambar dibawah ini.

Silahkan anda isi datanya, kemudian setelah terisi, data-data yang ada tersebut coba di-edit atau dihapus. Jika tidak ada yang error berarti uji coba kita untuk mengoperasikan sistem database berhasil. Tapi untuk uji coba operasi database PDO belum kita lakukan.O..iya sebelum saya lupa, khusus untuk PDO ini ada catatan penting seperti dibawah ini.
Operasi databasePDO ini akan jalan jika modul PDO sudah terpasang/ter-install pada web service anda. Untuk mengetahui PDO-nya sudah terpasang apa belum

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

coba gunakan fungsi phpinfo(). Hati-hati kalau anda masih menggunakan jasa web hosting. Tidak semua web hosting menyediakan modul PDO ini. Jika hosting anda belum memasang modul PDO jangan memaksakan diri menggunakan operasi database PDO, kecuali anda pingin nasibnya sama dengan pakdhe Sakiyun..hehe..

Jika anda ingin menggunakan PDO, maka yang perlu anda lakukan hanya merubah konfigurasi database saja. Merubahnya bagaimana? lihat script dibawah ini :
view plainprint?

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.

<?php $config = array(); // jika ingin menggunakan klasik ubah mejadi 'mysql' $config['db']['type'] = 'mysql_pdo'; // jika anda menggunakan klasik, ubah menjadi 'localhost' $config['db']['server'] = '127.0.0.1'; //sesuaikan dengan user yang ada di database mysql anda $config['db']['user'] = 'root'; //sesuaikan dengan password mysql anda $config['db']['password'] = ''; //sesuaikan dengan nama database yang anda buat $config['db']['database'] = 'coba'; ?>

Nah, sekarang coba anda ukur waktu komputasi (lama proses eksekusi program). Dalam framework sudah disediakan fasilitas untuk mengukur waktu komputasi dan besarnya memory yang dibutuhkan untuk menjalankan aplikasi. Pada aplikasi ini fasilitas pengukur waktu komputasi dan kebutuhan resource memory sudah terpasang. Coba anda lihat gambar hasil eksekusi program diatas. Di tulisan yang paling bawah itu adalah pengukur waktu komputasi dan konsumsi memory. Menurut pakdhe Sakiyun antara operasi klasik dan operasi PDO lebih cepat operasi klasik. Kalau para pembaca tidak/belum percaya silahkan dicoba saja. Sampai disini keseluruhan proses uji coba sudah selesai kita laksanakan. Tapi PR kita masih banyak. Kita masih harus sering-sering menulis. Mudah-mudahan dalam tempoe jang sesingkat-singkatnya pakdhe Sakiyun dapat ide baru lagi sehingga tulisan-tulisannya bisa dinikmati oleh para pembaca yang budiman, baik hati dan tidak sombong :-D Untuk mempercepat uji coba, silahkan download uji coba framework ini pada kolom download yang sudah saya sediakan. Sekian, Semoga ada guna dan manfaatnya. Regards, Tole Doelkamit

http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.html Tanggal 12-November 2013 Pukul 18:30

Anda mungkin juga menyukai