tutorial membangun sistem core.docx
DESCRIPTION
Membuat Sistem CoreTRANSCRIPT
Tutorial Membangun Sistem Core
Membuat 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.htmlTanggal 12-November 2013 Pukul 18:30
Tole : "Pakdhe..Pakdhe..coba sampean lihat gambarnya...kok mirip seperti becak
ya? "
Pakdhe :"Huss...gimana to?kok mirip becak?apa gara-gara ada 3 bagian itu?oalah..imajinasi
sampean itu lho,kok ya aneh-aneh saja"
Tole :"Lha ya itu, coba to sampean perhatiin lagi...bener kan mirip becak?"
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.htmlTanggal 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.htmlTanggal 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.htmlTanggal 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. base
2. bootstrap
3. common
4. controller
5. loader
6. model
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 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. <?php defined('SYS') or exit('Access Denied!'); 2. /* 3. * Becak MVC Framework version 1.0 4. * 5. * File : base.php 6. * Directory : system/core 7. * Author : Eko Heri Susanto 8. * Description : class base adalah class yang digunakan untuk menyimpan instance obje
ct 9. */ 10. class base { 11. private static $instance; 12. public static $helpers = array(); 13. public static $models = array(); 14. public static $databases = array(); 15. 16. public function __construct(){ 17. self::$instance = &$this; 18. } 19. public static function getInstance(){ 20. return self::$instance; 21. } 22. } 23. 24. function this(){ return base::getInstance(); } 25. ?>
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. <?php defined('SYS') or exit('Access Denied!'); 2. /* 3. * Becak MVC Framework version 1.0 4. * 5. * File : becak.php 6. * Directory : system/core 7. * Author : Eko Heri Susanto 8. * Description : routine untuk memuat (loaded) system utama serta routine untuk menja
lankan default 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.htmlTanggal 12-November 2013 Pukul 18:30
16. require (SYS .'error'. DS .'errors.php'); 17. require (SYS.'libraries'. DS .'benchmark_library.php'); 18. $benchmark = common::register('Benchmark'); 19. $benchmark->mark('total_execution_time_start'); 20. 21. require (SYS.'core'.DS.'loader.php'); 22. require (SYS.'core'.DS.'base.php'); 23. require (SYS.'core'.DS.'controller.php'); 24. require (SYS.'core'.DS.'model.php'); 25. 26. require (SYS.'libraries'.DS.'router_library.php'); 27. require (SYS.'libraries'.DS.'uri_library.php'); 28. require (SYS.'libraries'.DS.'output_library.php'); 29. require (SYS.'libraries'.DS.'config_library.php'); 30. 31. 32. date_default_timezone_set(common::config_item('timezone_set')); 33. 34. $uri = common::register('Uri'); 35. $router = common::register('Router'); 36. $output = common::register('Output'); 37. 38. if ($output->_display_cache($uri) == TRUE) { exit; } 39. 40. $GLOBALS['d'] = $router->fetch_directory(); // Get requested directory 41. $GLOBALS['c'] = $router->fetch_class(); // Get requested controller 42. $GLOBALS['m'] = $router->fetch_method(); // Get requested method 43. 44. //panggil default controller pada directory application/controller 45. if(! file_exists(DIR.$GLOBALS['d'].DS.'controllers'.DS.$GLOBALS['c'].PHP_EXT)) { 46. if($router->query_string) 47. show_404("{$GLOBALS['d']}/{$GLOBALS['c']}/{$GLOBALS['m']}"); 48. 49. throw new Exception('Unable to load your default controller.Please make sure t
he controller 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. show_404("{$GLOBALS['d']}/{$GLOBALS['c']}/{$GLOBALS['m']}"); 64. } 65. 66. call_user_func_array(array($MC, $GLOBALS['m']), array_slice($uri->rsegments, 3)); 67. 68. $output->_display(); 69. 70. while (ob_get_level() > 0) { ob_end_flush(); } 71. ?>
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 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. <?php defined('SYS') or exit('Access Denied!'); 2. /* 3. * Becak MVC Framework version 1.0 4. * 5. * File : common.php 6. * Directory : system/core 7. * Author : Eko Heri Susanto 8. * Description : class umum 9. */ 10. 11. //class registry digunakan untuk mendaftarkan variable menjadi object 12. class common { 13. private static $object = array(); 14. private static $instance; 15. 16. //singleton 17. private static function singleton(){ 18. if(!isset(self::$instance)) 19. self::$instance = new self(); 20. return self::$instance; 21. } 22. private function get($id){ 23. if(isset(self::$object[$id])){ 24. return self::$object[$id]; 25. } 26. return NULL; 27. } 28. private function set($id, $value){ 29. self::$object[$id] = $value; 30. } 31. private static function getObject($id) { 32. return self::singleton()->get($id); 33. } 34. private static function setObject($id, $instance){ 35. return self::singleton()->set($id, $instance); 36. } 37. 38. private static function get_static($filename = 'config', $var = '', $folder = '') 39. { 40. static $static = array(); 41. 42. if ( ! isset($static[$filename])) 43. { 44. if ( ! file_exists($folder. DS .$filename. PHP_EXT)) 45. throw new Exception('The static file '. DS .$folder. DS .$filename. PHP_EX
T .' does not exist.'); 46. 47. require($folder. DS .$filename. PHP_EXT); 48. 49. if($var == '') $var = &$filename;
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
50. 51. if ( ! isset($$var) OR ! is_array($$var)) 52. { 53. throw new Exception('The static file '. DS .$folder. DS .$filename. PHP_EX
T .' file 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. } 109.
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
110. fclose($fp); 111. @chmod($file, DIR_WRITE_MODE); 112. @unlink($file); 113. return TRUE; 114. } 115. elseif (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) 116. { 117. return FALSE; 118. } 119. 120. fclose($fp); 121. return TRUE; 122. } 123. }//end class 124. ?>
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. <?php defined('SYS') or exit('Access Denied!'); 2. /* 3. * Becak MVC Framework version 1.0 4. * 5. * File : controller.php 6. * Directory : system/core 7. * Author : Eko Heri Susanto 8. * Description : class controller ini adalah induk dari semua controller 9. */ 10. require(APP .'globals'. DS .'global_controller'. PHP_EXT); 11. 12. class controller extends global_controller { 13. public function __construct(){ 14. parent::__construct(); 15. $this->_init(); 16. } 17. private function _init() 18. { 19. $Classes = array( 20. 'config' => 'Config', 21. 'router' => 'Router', 22. 'uri' => 'URI', 23. 'output' => 'Output' 24. ); 25. 26. foreach ($Classes as $public_var => $Class) 27. { 28. $this->$public_var = common::register($Class); 29. } 30. } 31. }//end class 32. ?>
5. Loader
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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. <?php defined('SYS') or exit('Access Denied!'); 2. /* 3. * Becak MVC Framework version 1.0 4. * 5. * File : loader.php 6. * Directory : system/core 7. * Author : Eko Heri Susanto 8. * Description : class loader berfungsi untuk memuat (loaded) library, helper, view,
model 9. */ 10. class loader { 11. private static $helpers = array(); 12. private static $sys_helpers = array(); 13. public static function sys_library($library){ 14. self::_library($library, 'system'); 15. } 16. public static function app_library($library){ 17. self::_library($library, 'application'); 18. } 19. public static function library($library){ 20. self::_library($library, 'directories'); 21. } 22. private static function _library($library, $folder = 'system'){ 23. if($library=='')return false; 24. $library = strtolower($library); 25. switch($folder){ 26. case 'system' : $lib_folder = SYS.'libraries'.DS;break; 27. case 'application' : $lib_folder = APP.'libraries'.DS;break; 28. case 'directories' : $lib_folder = DIR.
$GLOBALS['d'].DS.'libraries'.DS;break; 29. } 30. if(file_exists($lib_folder.$library.'_library'.PHP_EXT )) { 31. require ($lib_folder.$library.'_library'.PHP_EXT ); 32. base::getInstance()->$library = common::register($library); 33. } else throw new Exception("Can't load library file: " . $library); 34. } 35. public static function sys_helper($helper) { 36. self::_helper($helper, 'system'); 37. }
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
38. public static function app_helper($helper='') { 39. self::_helper($helper, 'application'); 40. } 41. public static function helper($helper =''){ 42. self::_helper($helper, 'directories'); 43. } 44. private static function _helper($helper, $folder = 'system') { 45. if($helper=='')return false; 46. if( isset(self::$helpers[$helper]) ){ 47. return; 48. } 49. $helper = strtolower($helper); 50. switch($folder){ 51. case 'system' : $hlp_folder = SYS.'helpers'. DS;break; 52. case 'application' : $hlp_folder = APP.'helpers'. DS;break; 53. case 'directories' : $hlp_folder = DIR.
$GLOBALS['d'].DS.'helpers'.DS;break; 54. } 55. if(file_exists($hlp_folder . $helper.'_helper'. PHP_EXT)){ 56. include($hlp_folder . $helper.'_helper'. PHP_EXT); 57. self::$helpers[$helper] = $helper; 58. return; 59. } else throw new Exception("Can't load helper file: " . $helper); 60. } 61. public static function app_model($model_name){ 62. self::_model($model_name, 'application'); 63. } 64. public static function model($model_name){ 65. self::_model($model_name, 'directories'); 66. } 67. private static function _model($model_name, $folder = 'system'){ 68. if($model_name=='')return; 69. $model_name = strtolower($model_name); 70. $model_var = &$model_name; 71. if (isset(base::getInstance()->$model_var) AND is_objec
t(base::getInstance()->$model_var)) 72. { return; } 73. switch($folder){ 74. case 'application' : $mdl_folder = APP.'models'.DS;break; 75. case 'directories' : $mdl_folder = DIR.
$GLOBALS['d'].DS.'models'.DS;break; 76. } 77. if(file_exists($mdl_folder.$model_name.PHP_EXT )) { 78. require ($mdl_folder.$model_name.PHP_EXT ); 79. base::getInstance()->$model_var = new $model_name(); 80. base::getInstance()->$model_var->_assign_db_objects(); 81. base::$models[$model_var] = base::getInstance()->$model_var; 82. } else throw new Exception("Can't load model file: " . $model); 83. } 84. public static function database($db_name = 'db'){ 85. $db_var = $db_name; 86. $obj = base::getInstance(); 87. if (isset($obj->{$db_var}) AND is_object($obj->{$db_var}) ) { 88. return; 89. } 90. require (SYS .'database'. DS .'db_factory'. PHP_EXT); 91. $obj->{$db_var} = db_factory::callDB($db_name); 92. base::$databases[$db_var] = $db_var; 93. if (count(base::$models) >= 0) { 94. foreach (base::$models as $model_name) 95. $obj->$model_name->$db_var = &$obj->$db_var;
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
96. } 97. } 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 masing-
masing 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. <?php defined('SYS') or exit('Access Denied!'); 2. /* 3. * Becak MVC Framework version 1.0 4. * 5. * File : model.php 6. * Directory : system/core 7. * Author : Eko Heri Susanto 8. * Description : class model ini adalah induk dari semua model 9. */ 10. 11. class model extends base { 12. public function __construct(){ 13. $this->_assign_db_objects(); 14. } 15. public function _assign_db_objects(){ 16. foreach(base::$databases as $key){ 17. $this->$key = &base::getInstance()->$key; 18. } 19. } 20. 21. }//end class model 22. ?>
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(){
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
7. parent::__construct(); 8. loader::sys_helper('view'); 9. loader::sys_helper('head_tag'); 10. $this->base = common::config_item('base_url'); 11. $this->base_url = common::config_item('base_url') . common::config_item
('index_page'); 12. $this->base_img = common::config_item('source_url').'images/'; 13. $this->meta = meta('Content-type', 'text/html; charset=utf-8', 'equiv'); 14. $this->meta .= meta('author', 'Eko Heri Susanto'); 15. } 16. } 17. ?>
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. <?php 2. error_reporting(E_ALL | E_STRICT); 3. define('DS', DIRECTORY_SEPARATOR); 4. define('SYS', 'system'.DS); 5. define('APP', 'application'.DS); 6. define('DIR', APP . 'directories'.DS); 7. define('PHP_EXT', '.php'); 8. define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME)); 9. if ( get_magic_quotes_gpc() ) { 10. 11. function stripslashes_gpc(&$value){ 12. $value = stripslashes($value); 13. } 14. 15. array_walk_recursive($_GET, 'stripslashes_gpc'); 16. array_walk_recursive($_POST, 'stripslashes_gpc'); 17. array_walk_recursive($_COOKIE, 'stripslashes_gpc'); 18. array_walk_recursive($_REQUEST, 'stripslashes_gpc'); 19. } 20. require(SYS .'core'.DS.'bootstrap.php'); 21. ?>
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.
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
Dalam pemrograman PHP terdapat beberapa cara untuk mengoperasikan database khususnya mysql,
antara lain menggunakan metode klasik yaitu dengan memanfaatkan fungsi bawaan (mysql_connect,
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.htmlTanggal 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 masing-
masing 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_factoryview plainprint?
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
1. <?php defined('SYS') or exit('Access Denied!'); 2. /* 3. * Becak MVC Framework version 1.0 4. * 5. * File : db_factory.php 6. * Directory : system/database 7. * Author : Eko Heri Susanto 8. * Description : penyedia koneksi ke bermacam-macam database 9. */ 10. class db_factory { 11. public static function callDB($db_name){ 12. include APP.'config'.DS.'database'.PHP_EXT; 13. if(!is_array($config[$db_name])) 14. throw new Exception("Please set a valid database driver from config databa
se file"); 15. $driver_class = strtolower($config[$db_name]['type']); 16. include SYS.'database'.DS.'driver'.DS.$driver_class.PHP_EXT; 17. include SYS.'database'.DS.'db_adapter'.PHP_EXT; 18. $driver = new $driver_class($config[$db_name]); 19. $adapter = new db_adapter($driver); 20. return $adapter; 21. }//end callDB 22. }//end class 23. ?>
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.htmlTanggal 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_adapterview plainprint?
1. <?php defined('SYS') or exit('Access Denied!'); 2. /* 3. * Becak MVC Framework version 1.0 4. * 5. * File : db_adapter.php 6. * Directory : system/database 7. * Author : Eko Heri Susanto 8. * Description : fungsi common (CRUD) untuk database 9. */ 10. class db_adapter { 11. private $driver = null; 12. private $sql = ''; 13. public function __construct($driver){ 14. $this->driver = $driver; 15. $this->driver->connect(); 16. } 17. public function __destruct(){ 18. $this->driver->disconnect(); 19. } 20. public function select($sql){ 21. $this->sql = $sql; 22. } 23. public function fetch_array(){ 24. return $this->driver->results($this->sql, 'array'); 25. } 26. public function fetch_object(){ 27. return $this->driver->results($this->sql, 'object'); 28. } 29. public function query($sql){ 30. return $this->driver->query($sql); 31. } 32. public function insert($table, $data){ 33. $sql = "INSERT INTO ".$table; 34. $multi_rows = FALSE; 35. foreach($data as $key => $val){ 36. if(!is_array($val) ) { 37. $fields[$key] = $key; 38. $rows[$key] = $this->escape($val); 39. }else { 40. $multi_rows = TRUE; 41. foreach($val as $skey => $sval){ 42. $fields[$skey] = $skey; 43. $row[$skey] = $this->escape($sval); 44. } 45. $rows[$key] = "(".implode(', ', $row).")"; 46. } 47. } 48. $sql .= " (". implode(', ', $fields).") VALUES "; 49. if(!$multi_rows) $sql .= "(". implode(', ', $rows).");"; 50. else $sql .= implode(', ', $rows).";"; 51. return $this->driver->query($sql);
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
52. } 53. public function update($table, $data, $where=NULL){ 54. $sql = "UPDATE ".$table." SET "; 55. $values = array(); 56. foreach($data as $key => $val){ 57. $values[$key] = $key." = ".$this->escape($val); 58. } 59. $sql .= implode(", ", $values); 60. if(is_array($where)){ 61. $filter = array(); 62. foreach($where as $key => $val){ 63. $filter[$key] = "(".$key." = ".$this->escape($val).")"; 64. } 65. $sql .= " WHERE ".implode(" AND ", $filter); 66. } 67. return $this->driver->query($sql); 68. } 69. public function delete($table, $where=NULL){ 70. $sql = "DELETE FROM ".$table; 71. if(is_array($where)){ 72. $filter = array(); 73. foreach($where as $key => $val){ 74. $filter[$key] = "(".$key." = ".$this->escape($val).")"; 75. } 76. $sql .= " WHERE ".implode(" AND ", $filter); 77. } 78. return $this->driver->query($sql); 79. } 80. 81. private function escape($str) 82. { 83. if(is_string($str)){ 84. return "'".str_replace("'", "''",$str)."'"; 85. } 86. 87. if(is_integer($str)) 88. return (int)$str; 89. 90. if(is_double($str)) 91. return (double)$str; 92. 93. if(is_float($str)) 94. return (float)$str; 95. 96. if(is_bool($str)) 97. return ($str === FALSE) ? 0 : 1; 98. 99. if(is_null($str)) 100. return 'NULL'; 101. } 102. }//end class 103. ?>
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.htmlTanggal 12-November 2013 Pukul 18:30
Berikut ini contoh source code class mysql (operasi database klasik)
view plainprint?
1. <?php defined('SYS') or exit('Access Denied!'); 2. /* 3. * Becak MVC Framework version 1.0 4. * 5. * File : mysql.php 6. * Directory : system/database/driver 7. * Author : Eko Heri Susanto 8. * Description : driver mysql 9. */ 10. class mysql { 11. private $conn; 12. private $config; 13. public function __construct($config){ 14. $this->config = $config; 15. } 16. public function connect() { 17. extract($this->config); 18. if(isset($this->conn)) return $this->conn; 19. $this->conn = @mysql_connect($server,$user,$password, true) or show_error
("Unable connect to mysql server.Please make sure the server, username or password specified in your Database.php file is valid.");
20. @mysql_select_db($database, $this->conn) or show_error("Unable to select your default database name.Please make sure the database name specified in your Database.php file is valid.");
21. } 22. public function disconnect(){ 23. if(isset($this->conn)) { 24. @mysql_close($this->conn); 25. } 26. } 27. public function query($sql){ 28. $result = @mysql_query($sql, $this->conn); 29. if (!$result) { 30. show_error(mysql_error()); 31. } 32. return $result; 33. } 34. public function results($query, $type = 'object'){ 35. $result = $this->query($query); 36. $return = array(); 37. while ($row = @mysql_fetch_object($result)) { 38. if($type == 'array') 39. $return[] = (array) $row; 40. else 41. $return[] = $row; 42. } 43. @mysql_free_result($result); 44. return @$return; 45. }
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
46. }//end class 47. ?>
Berikut ini contoh source code class mysql_pdo (operasi database PDO)
view plainprint?
1. <?php defined('SYS') or exit('Access Denied!'); 2. /* 3. * Becak MVC Framework version 1.0 4. * 5. * File : pdo_mysql.php 6. * Directory : system/database/driver 7. * Author : Eko Heri Susanto 8. * Description : driver PDO mysql 9. */ 10. class mysql_pdo { 11. private $conn; 12. private $config; 13. public function __construct($config){ 14. $this->config = $config; 15. } 16. public function connect() { 17. extract($this->config); 18. if(isset($this->conn)) return $this->conn; 19. try{ 20. $this->conn = new PDO ("mysql:host=$server;dbname=$database",$user,
$password); 21. }catch(PDOException $e){ 22. echo __LINE__.$e->getMessage(); 23. } 24. } 25. public function disconnect(){ 26. if(isset($this->conn)) { 27. $this->conn = null; 28. } 29. } 30. public function query($sql){ 31. $result = null; 32. try{ 33. $result = $this->conn->exec($sql) or print_r($this->conn->errorInfo()); 34. }catch(PDOException $e){ 35. echo __LINE__.$e->getMessage(); 36. } 37. return $result; 38. } 39. public function results($query, $type = 'object'){ 40. $result = $this->conn->query($query) or print_r($this->conn->errorInfo()); 41. $result->setFetchMode(PDO::FETCH_ASSOC); 42. return $result; 43. } 44. }//end class 45. ?>
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.htmlTanggal 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. CREATE TABLE `blogkomputer`.`content` ( 2. `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 3. `judul` VARCHAR( 100 ) NOT NULL , 4. `kategori` VARCHAR( 100 ) NOT NULL , 5. `isi` TEXT NOT NULL 6. ) 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 adalah 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 iniview plainprint?
1. $config = array(); 2. 3. // jika ingin menggunakan PDO ubah mejadi 'mysql_pdo' 4. $config['db']['type'] = 'mysql'; 5. 6. // jika anda menggunakan PDO, ubah menjadi '127.0.0.01' 7. $config['db']['server'] = 'localhost'; 8. 9. //sesuaikan dengan user yang ada di database mysql anda 10. $config['db']['user'] = 'root'; 11. 12. //sesuaikan dengan password mysql anda 13. $config['db']['password'] = ''; 14. 15. //sesuaikan dengan nama database yang anda buat 16. $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.htmlTanggal 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.htmlTanggal 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 URL-
nya tidak seperti gambar diatas, tapi berbentuk seperti ini :
http://blogkomputer.com/index.php?d=web&c=page&m=content&data1=1&data2=Tutorial-
Membangun-Sistem-Core
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 plain print ?
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.htmlTanggal 12-November 2013 Pukul 18:30
20. } 21. $path = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] :
@getenv('PATH_INFO'); 22. if (trim($path, '/') != '' && $path != "/".SELF) 23. { 24. $this->uri_string = $path; 25. return; 26. } 27. $path = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] :
@getenv('QUERY_STRING'); 28. if (trim($path, '/') != '') 29. { 30. $this->uri_string = $path; 31. return; 32. } 33. $path = (isset($_SERVER['ORIG_PATH_INFO'])) ? $_SERVER['ORIG_PATH_INFO'] :
@getenv('ORIG_PATH_INFO'); 34. if (trim($path, '/') != '' && $path != "/".SELF) 35. { 36. $this->uri_string = str_replace($_SERVER['SCRIPT_NAME'], '', $path); 37. return; 38. } 39. $this->uri_string = ''; 40. } 41. else 42. { 43. $uri = strtoupper(config_item('uri_protocol')); 44. 45. if ($uri == 'REQUEST_URI') 46. { 47. $this->uri_string = $this->_parse_request_uri(); 48. return; 49. } 50. 51. $this->uri_string = (isset($_SERVER[$uri])) ? $_SERVER[$uri] :
@getenv($uri); 52. } 53. 54. if ($this->uri_string == '/') 55. { 56. $this->uri_string = ''; 57. } 58. } 59. 60. public function _parse_request_uri() 61. { 62. if ( ! isset($_SERVER['REQUEST_URI']) OR $_SERVER['REQUEST_URI'] == '') 63. { 64. return ''; 65. } 66. 67. $request_uri = preg_replace("|/(.*)|", "", str_replace("\", "/", $_SERVE
R['REQUEST_URI'])); 68. 69. if ($request_uri == '' OR $request_uri == SELF) 70. { 71. return ''; 72. } 73. 74. $fc_path = FCPATH.SELF; 75. if (strpos($request_uri, '?') !== FALSE)
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
76. { 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') != '' && c
ommon::config_item('enable_query_strings') == FALSE) 104. { 105. if ( ! preg_match("|^[".str_replace(array('\-', '-'), '-', preg_quo
te(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. }
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
132. } 133. } 134. 135. public function _reindex_segments() 136. { 137. array_unshift($this->segments, NULL); 138. array_unshift($this->rsegments, NULL); 139. unset($this->segments[0]); 140. unset($this->rsegments[0]); 141. } 142. public function segment($n, $no_result = FALSE) 143. { 144. return ( ! isset($this->segments[$n])) ? $no_result : $this-
>segments[$n]; 145. } 146. public function rsegment($n, $no_result = FALSE) 147. { 148. return ( ! isset($this->rsegments[$n])) ? $no_result : $this-
>rsegments[$n]; 149. } 150. public function uri_to_assoc($n = 3, $default = array()) 151. { 152. return $this->_uri_to_assoc($n, $default, 'segment'); 153. } 154. public function ruri_to_assoc($n = 3, $default = array()) 155. { 156. return $this->_uri_to_assoc($n, $default, 'rsegment'); 157. } 158. public function _uri_to_assoc($n = 3, $default = array(), $which = 'segment
') 159. { 160. if ($which == 'segment') 161. { 162. $total_segments = 'total_segments'; 163. $segment_array = 'segment_array'; 164. } 165. else 166. { 167. $total_segments = 'total_rsegments'; 168. $segment_array = 'rsegment_array'; 169. } 170. 171. if ( ! is_numeric($n)) 172. { 173. return $default; 174. } 175. 176. if (isset($this->keyval[$n])) 177. { 178. return $this->keyval[$n]; 179. } 180. 181. if ($this->$total_segments() < $n) 182. { 183. if (count($default) == 0) 184. { 185. return array(); 186. } 187. 188. $retval = array(); 189. foreach ($default as $val)
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
190. { 191. $retval[$val] = FALSE; 192. } 193. return $retval; 194. } 195. 196. $segments = array_slice($this->$segment_array(), ($n - 1)); 197. 198. $i = 0; 199. $lastval = ''; 200. $retval = array(); 201. foreach ($segments as $seg) 202. { 203. if ($i % 2) 204. { 205. $retval[$lastval] = $seg; 206. } 207. else 208. { 209. $retval[$seg] = FALSE; 210. $lastval = $seg; 211. } 212. 213. $i++; 214. } 215. 216. if (count($default) > 0) 217. { 218. foreach ($default as $val) 219. { 220. if ( ! array_key_exists($val, $retval)) 221. { 222. $retval[$val] = FALSE; 223. } 224. } 225. } 226. $this->keyval[$n] = $retval; 227. return $retval; 228. } 229. public function assoc_to_uri($array) 230. { 231. $temp = array(); 232. foreach ((array)$array as $key => $val) 233. { 234. $temp[] = $key; 235. $temp[] = $val; 236. } 237. 238. return implode('/', $temp); 239. } 240. public function slash_segment($n, $where = 'trailing') 241. { 242. return $this->_slash_segment($n, $where, 'segment'); 243. } 244. public function slash_rsegment($n, $where = 'trailing') 245. { 246. return $this->_slash_segment($n, $where, 'rsegment'); 247. } 248. 249. public function _slash_segment($n, $where = 'trailing', $which = 'segment')
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
250. { 251. if ($where == 'trailing') 252. { 253. $trailing = '/'; 254. $leading = ''; 255. } 256. elseif ($where == 'leading') 257. { 258. $leading = '/'; 259. $trailing = ''; 260. } 261. else 262. { 263. $leading = '/'; 264. $trailing = '/'; 265. } 266. return $leading.$this->$which($n).$trailing; 267. } 268. 269. public function segment_array() 270. { 271. return $this->segments; 272. } 273. 274. public function rsegment_array() 275. { 276. return $this->rsegments; 277. } 278. 279. public function total_segments() 280. { 281. return count($this->segments); 282. } 283. 284. public function total_rsegments() 285. { 286. return count($this->rsegments); 287. } 288. 289. public function uri_string() 290. { 291. return $this->uri_string; 292. } 293. 294. 295. public function ruri_string() 296. { 297. return '/'.implode('/', $this->rsegment_array()).'/'; 298. } 299. 300. 301. } 302. ?>
Sedangkan source code library Route ada dibawah ini
view plain print ?
1. <?php defined('SYS') or exit('Access Denied!'); 2. class Router {
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
3. 4. public $config; 5. public $routes = array(); 6. public $error_routes = array(); 7. public $class = ''; 8. public $method = 'index'; 9. public $directory = ''; 10. public $uri_protocol = 'auto'; 11. public $default_controller; 12. public $query_string = FALSE; // Obullo 1.0 changes 13. 14. public function __construct() 15. { 16. //$routes = get_config('routes'); // Obullo changes.. 17. //print_r($routes); 18. 19. require(APP. 'config'.DS.'routes'. PHP_EXT); 20. $this->routes = ( ! isset($routes) OR ! is_array($routes)) ? array() : $route
s; 21. //print_r($this->routes); 22. unset($routes); 23. 24. $this->method = $this->routes['index_method']; 25. $this->uri = common::register('Uri'); 26. $this->_set_routing(); 27. 28. //log_message('debug', "Router Class Initialized"); 29. } 30. 31. private function _set_routing() 32. { 33. 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. {
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
56. throw new Exception("Unable to determine what should be displayed. A default route 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 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_EXT)) 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()
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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); 122. 123. if (isset($this->routes[$uri])) 124. { 125. $this->_set_request(explode('/', $this->routes[$uri])); 126. return; 127. } 128. 129. foreach ($this->routes as $key => $val) 130. { 131. $key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $ke
y)); 132. 133. if (preg_match('#^'.$key.'$#', $uri)) 134. { 135. if (strpos($val, '$') !== FALSE AND strpos($key, '(') !== FALSE
) 136. { 137. $val = preg_replace('#^'.$key.'$#', $val, $uri); 138. } 139. 140. $this->_set_request(explode('/', $val)); 141. return; 142. } 143. } 144. $this->_set_request($this->uri->segments); 145. } 146. 147. public function set_class($class) 148. { 149. $this->class = $class; 150. } 151. public function fetch_class() 152. { 153. return $this->class; 154. } 155. public function set_method($method) 156. { 157. $this->method = $method; 158. } 159. 160. public function fetch_method() 161. { 162. if ($this->method == $this->fetch_class()) 163. { 164. return $this->routes['index_method']; 165. } 166. 167. return $this->method; 168. } 169. public function set_directory($dir) 170. { 171. $this->directory = $dir.''; 172. }
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
173. public function fetch_directory() 174. { 175. return $this->directory; 176. } 177. 178. } 179. ?>
2. Output Library
Sesuai dengan namanya, library ini berfungsi untuk menangani output hasil proses. Apa yang di-
ouputkan 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 iniview plain print ?
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. {
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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) 36. { 37. $this->headers[] = array($header, $replace); 38. } 39. 40. public function set_status_header($code = 200, $text = '') 41. { 42. set_status_header($code, $text); 43. } 44. 45. public function enable_profiler($val = TRUE) 46. { 47. exit('Profiler Class Not Implemented Yet ! Use this->db->last_query() for now.
'); 48. 49. $this->enable_profiler = (is_bool($val)) ? $val : TRUE; 50. } 51. public function cache($time) 52. { 53. $this->cache_expiration = ( ! is_numeric($time)) ? 0 : $time; 54. } 55. public function _display($output = '') 56. { 57. if ($output == '') 58. { 59. $output =& $this->final_output; 60. } 61. if ($this->cache_expiration > 0) 62. { 63. $this->_write_cache($output); 64. } 65. $elapsed = common::register('Benchmark')-
>elapsed_time('total_execution_time_start', 'total_execution_time_end'); 66. $output = str_replace('0.0182', $elapsed, $output); 67. $memory = ( ! function_exists('memory_get_usage')) ? '0' : roun
d(memory_get_usage()/1024/1024, 2).' MB'; 68. $output = str_replace('1.77 MB', $memory, $output); 69. /* 70. if ($this->parse_exec_vars === TRUE) 71. { 72. $memory = ( ! function_exists('memory_get_usage')) ? '0' : round(memory_ge
t_usage()/1024/1024, 2).'MB'; 73. $output = str_replace('0.0182', $elapsed, $output); 74. $output = str_replace('1.77 MB', $memory, $output); 75. } 76. */ 77. // -------------------------------------------------------------------- 78. 79. // Is compression requested? 80. /*if (common::config_item('compress_output', 'cache') === TRUE) 81. { 82. if (extension_loaded('zlib')) 83. {
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
84. if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) AND strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE)
85. { // Obullo changes .. 86. ini_set('zlib.output_compression_level', config_item('compression_
level', 'cache')); 87. ob_start('ob_gzhandler'); 88. } 89. } 90. } 91. */ 92. if (count($this->headers) > 0) 93. { 94. foreach ($this->headers as $header) 95. { 96. @header($header[0], $header[1]); 97. } 98. } 99. if ( ! function_exists('this')) 100. { 101. echo $output; 102. //log_message('debug', "Final output sent to browser"); 103. //log_message('debug', "Total execution time: ".$elapsed); 104. return TRUE; 105. } 106. if ($this->enable_profiler == TRUE) 107. { 108. $profiler = base::register('Profiler'); 109. if (preg_match("|</body>.*?</html>|is", $output)) 110. { 111. $output = preg_replace("|</body>.*?</html>|is", '', $output); 112. $output .= $profiler->run(); 113. $output .= '</body></html>'; 114. } 115. else 116. { 117. $output .= $profiler->run(); 118. } 119. } 120. $ob = base::getInstance(); 121. 122. if (method_exists($ob, '_output')) 123. { 124. $ob->_output($output); 125. } 126. else 127. { 128. echo $output; // Send it to the browser! 129. } 130. 131. //log_message('debug', "Final output sent to browser"); 132. //log_message('debug', "Total execution time: " . $elapsed); 133. } 134. public function _write_cache($output) 135. { 136. $OB = base::getInstance(); 137. 138. //$path = common::config_item('cache_path', 'cache'); 139. 140. $cache_path = APP.'cache'.DS; //= ($path == '') ? APP.'system'.DS.'cac
he'.DS : $path; 141.
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
142. if ( ! is_dir($cache_path) OR ! common::is_really_writable($cache_path))
143. { 144. throw new Exception('Unable to write cache file: '.$cache_path);
145. return; 146. } 147. 148. $uri = $OB->config->item('base_url').$OB->config->item('index_page').
$OB->uri->uri_string(); 149. $cache_path .= md5($uri); 150. 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') == '') ? AP
P.'system'.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)
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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. } 209. 210. // Has the file expired? If so we'll delete it. 211. if (time() >= trim(str_replace('TS--->', '', $match['1']))) 212. { 213. if (common::is_really_writable($cache_path)) 214. { 215. @unlink($filepath); 216. //log_message('debug', "Cache file has expired. File deleted");
217. return FALSE; 218. } 219. } 220. 221. // Display the cache 222. $this->_display(str_replace($match['0'], '', $cache)); 223. //log_message('debug', "Cache file is current. Sending it to browser.")
; 224. return TRUE; 225. } 226. }//end class 227. ?>
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 plain print ?
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. {
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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); 31. 32. if ( ! isset($config) OR ! is_array($config)) 33. { 34. if ($fail_gracefully === TRUE) 35. { 36. return FALSE; 37. } 38. 39. throw new Exception('Your '.$file. '.PHP file does not appear to contain a
valid configuration 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. }
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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. 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. ?>
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
4. Benchmark
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 plain print ?
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';
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
34. } 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...
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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...
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. Aturan-
aturannya seperti berikut ini :
1. 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)
2. 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)
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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?
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. <?php defined('SYS') or exit('Access Denied!'); 2. /* 3. * Becak MVC Framework version 1.0 4. * 5. * File : view_helper.php 6. * Directory : system/helpers 7. * Author : Eko Heri Susanto 8. * Description : fungsi untuk memuat (loaded) view atau user interface 9. */ 10. function app_view($view_name, $arr_data = array(), $return_string=false){ 11. $file = APP . 'views'. DS . $view_name . PHP_EXT; 12. return _view($file, $arr_data, $return_string); 13. }//end view 14. 15. function view($view_name, $arr_data = array(), $return_string=true){ 16. $file = DIR.$GLOBALS['d'] .DS. 'views'. DS . $view_name . PHP_EXT; 17. return _view($file, $arr_data, $return_string); 18. } 19. 20. function app_script($filename, $data = '') { 21. return _script(APP .'scripts'. DS, $filename, $data); 22. } 23. 24. function script($filename, $data = '') { 25. return _script(DIR .$GLOBALS['d']. DS .'scripts'. DS, $filename, $data); 26. } 27. 28. function _view($file, $arr_data = array(), $return_string){ 29. if (!file_exists($file)) throw new Exception("Can't load template file: " . $fil
e); 30. 31. if(sizeof($arr_data) > 0) extract($arr_data, EXTR_SKIP); 32. ob_start();
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
33. include ($file); 34. if($return_string){ 35. $content = ob_get_contents(); 36. @ob_end_clean(); 37. return $content; 38. } 39. common::register('Output')->append_output(ob_get_contents()); 40. @ob_end_clean(); 41. return; 42. } 43. function _script($path, $filename, $data = '') 44. { 45. if( emptyempty($data) ) $data = array(); 46. 47. if ( ! file_exists($path . $filename . PHP_EXT) ) 48. { 49. throw new Exception('Unable locate the script file: '. $path . $filename . PHP
_EXT); 50. } 51. 52. if(sizeof($data) > 0) { extract($data, EXTR_SKIP); } 53. 54. ob_start(); 55. 56. include($path . $filename . PHP_EXT); 57. $content = ob_get_contents(); 58. 59. ob_end_clean(); 60. return " 61. ".$content; 62. } 63. ?>
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
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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(); 8. 9. if(isset($_cont->_ent->css_folder{1})) 10. { 11. $path = $path . $_cont->_ent->css_folder; 12. }*/ 13. 14. $url = base::getInstance()->config->slash_item('source_url').'css'; 15. 16. $style = ''; 17. foreach($filename as $key => $css) 18. { 19. $style .= " 20. ".link_tag($url.'/'.$css, 'stylesheet', 'text/css', $title, $media); 21. } 22. 23. return $style; 24. } 25. function js($filename, $arguments = '', $type = 'text/javascript') 26. { 27. if( ! is_array($filename)) 28. $filename = array($filename); 29. 30. $url = base::getInstance()->config->slash_item('source_url').'js/'; 31. 32. $js = ''; 33. foreach($filename as $key => $file) 34. { 35. $js.= " 36. ".'<script type="'.$type.'" src="'.$url.$file.'" '.$arguments.'></script>'; 37. } 38. 39. return $js; 40. } 41. function meta($name = '', $content = '', $type = 'name', $newline = " 42. ") 43. { 44. if ( ! is_array($name)) 45. { 46. $name = array(array('name' => $name, 'content' => $content, 'type' => $type, '
newline' => $newline)); 47. } 48. else 49. { 50. // Turn single array into multidimensional 51. if (isset($name['name'])) 52. { 53. $name = array($name); 54. } 55. } 56. 57. $str = ''; 58. foreach ($name as $meta)
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
59. { 60. $type = ( ! isset($meta['type']) OR $meta['type'] == 'name') ? 'name' :
'http-equiv'; 61. $name = ( ! isset($meta['name'])) ? '' : $meta['name']; 62. $content = ( ! isset($meta['content'])) ? '' : $meta['content']; 63. $newline = ( ! isset($meta['newline'])) ? " 64. " : $meta['newline']; 65. 66. $str .= '<meta '.$type.'="'.$name.'" content="'.$content.'" />'.$newline; 67. } 68. 69. return $str; 70. } 71. function link_tag($href = '', $rel = 'stylesheet', $type = 'text/css', $title = '', $m
edia = '', $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 != '')
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
118. { 119. $link .= 'media="'.$media.'" '; 120. } 121. 122. if ($title != '') 123. { 124. $link .= 'title="'.$title.'" '; 125. } 126. 127. $link .= '/>'; 128. } 129. 130. return $link; 131. } 132. ?>
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.htmlTanggal 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.htmlTanggal 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) dalam aplikasi
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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.htmlTanggal 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 plain print ?
1. <?php 2. defined('SYS') or exit('Access Denied!'); 3. /* 4. Isi 0 atau 1. Jika sudah online ganti dengan 0 5. */ 6. $config['display_errors'] = 1; 7. /** 8. | @see http://php.net/manual/en/function.date-default-timezone-set.php 9. | @link http://www.php.net/manual/en/timezones.php 10. */ 11. $config['timezone_set'] = 'Asia/Jakarta'; 12. 13. $config['base_url'] = 'http'.((isset($_SERVER['HTTPS']) && $_SERVE
R['HTTPS'] == 'on') ? 's' : '').'://'.$_SERVER['HTTP_HOST'].str_replace('//','/',dirname($_SERVER['SCRIPT_NAME']).'/');
14. $config['source_url'] = $config['base_url']."/sources/"; 15. $config['index_page'] = "index.php"; 16. $config['uri_protocol'] = "AUTO"; 17. $config['url_suffix'] = ""; 18. $config['language'] = "english"; 19. $config['charset'] = "UTF-8"; 20. $config['subclass_prefix'] = 'MY_'; 21. $config['permitted_uri_chars'] = 'a-z 0-9~%.:_-'; 22. $config['enable_query_strings'] = FALSE; 23. $config['directory_trigger'] = 'd'; 24. $config['controller_trigger'] = 'c'; 25. $config['function_trigger'] = 'm'; 26. $config['log_threshold'] = 0; 27. $config['log_path'] = ''; 28. $config['log_date_format'] = 'Y-m-d H:i:s'; 29. $config['encryption_key'] = ""; 30. $config['sess_cookie_name'] = 'becak_session'; 31. $config['sess_expiration'] = 7200; 32. $config['sess_encrypt_cookie'] = FALSE; 33. $config['sess_driver'] = 'cookie'; // or database 34. $config['sess_db_var'] = 'db'; 35. $config['sess_table_name'] = 'becak_sessions'; 36. $config['sess_match_ip'] = FALSE; 37. $config['sess_match_useragent'] = TRUE; 38. $config['sess_time_to_update'] = 300; 39. $config['cookie_prefix'] = ""; 40. $config['cookie_domain'] = ""; 41. $config['cookie_path'] = "/"; 42. $config['cookie_time'] = (7 * 24 * 60 * 60); 43. $config['global_xss_filtering'] = FALSE; 44. $config['time_reference'] = 'local';
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
45. $config['proxy_ips'] = ''; 46. ?>
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 plain print ?
1. <?php 2. defined('SYS') or exit('Access Denied!'); 3. $routes['default_controller'] = "welcome/page"; 4. $routes['index_method'] = "index"; 5. ?>
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 plain print ?
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
website membutuhkan tampilan yang bersifat umum dan standar, maka pemanfaatan view dasar ini
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
sangat dibutuhkan. Jangan lupa copy-paste di filder application/views dan simpan dengan nama
view_base.php
view plain print ?
1. <html> 2. <head> 3. <?php echo this()->meta; ?> 4. 5. <title><?php echo this()->title; ?></title> 6. 7. <base href="<?php echo this()->base; ?>" /> 8. 9. <?php 10. this()->head .= css('welcome.css'); 11. echo this()->head; 12. ?> 13. 14. </head> 15. 16. <body> 17. <h1>Welcome to Becak MVC Framework</h1> 18. <?php echo this()->body; ?> 19. 20. <p>Page rendered in {elapsed_time} seconds using {memory_usage} of memory</p> 21. </body> 22. 23. </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 plain print ?
1. <?php defined('SYS') or exit('Access Denied!'); 2. class page extends controller { 3. function __construct(){ 4. parent::__construct(); 5. } 6. function index(){ 7. $this->title = 'Welcome to Becak MVC Framework !'; 8. $this->meta .= meta('keywords', 'becak, php5, framework'); 9. $this->head .= css('welcome.js'); 10. $this->head .= script('welcome'); 11. 12. $data['var'] = 'This page generated by Becak MVC Framework.'; 13. 14. $this->body = view('view_welcome', $data); 15. 16. app_view('view_base'); 17. } 18. } 19. ?>
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 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 plain print ?
1. <p><?php echo $var;?></p> 2. 3. 4. <p></p> 5. 6. <p>If you would like to edit this page you'll find <b>View</b> located at:</p> 7. <code>application/directories/welcome/views/view_welcome.php</code> 8. 9. <p>The corresponding <b>Controller</b> for this page is found at:</p> 10. <code>application/directories/welcome/controllers/page.php</code> 11. 12. <p>The corresponding <b>Global controller</b> for this page is found at:</p> 13. <code>application/globals/global_controller.php</code> 14. 15. <code> 16. <input type="button" onclick="test_me();" value="Script Test !"/> 17. </code> 18. 19. <p>The corresponding <b>Script</b> file for this page is found at:</p> 20. <code>application/directories/welcome/scripts/welcome.php</code> 21. 22. <p>The corresponding <b>Global View</b> file for this page is found at:</p> 23. <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 plain print ?
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.htmlTanggal 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.cssview plain print ?
1. * { 2. margin: 0px; 3. padding: 0px; 4. } 5. 6. html, body { 7. height: 100%; 8. font-family: arial; 9. } 10. 11. 12. body { 13. background-color: #fff; 14. margin: 40px; 15. font-family: Arial; 16. font-size: 14px; 17. color: #000; 18. } 19. 20. a { 21. color: #003399; 22. background-color: transparent; 23. font-weight: normal; 24. } 25. 26. h1 { 27. color: #808080; 28. background-color: transparent; 29. border-bottom: 1px solid #D0D0D0; 30. font-size: 25px; 31. font-weight: bold; 32. margin: 24px 0 2px 0; 33. padding: 5px 0 6px 0; 34. } 35. 36. code { 37. font-family: Monaco, Verdana, Sans-serif; 38. font-size: 14px; 39. background-color: #f9f9f9; 40. border: 1px dotted #D0D0D0; 41. color: #969696; 42. display: block; 43. margin: 14px 0 14px 0; 44. padding: 12px 10px 12px 10px; 45. font-weight: bold; 46. }
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.htmlTanggal 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.."
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
Pakdhe Sakiyun : "Beras..eheheh..beyes..eheheh..becak...eheheh..beres...wani
piro??...hehe"
Uji Coba Sistem Database Becak HMVC FrameworkSesuai 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
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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 plain print ?
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, 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
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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.
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 plain print ?
1. <?php 2. $config = array(); 3. 4. // jika ingin menggunakan PDO ubah mejadi 'mysql_pdo' 5. $config['db']['type'] = 'mysql'; 6. 7. // jika anda menggunakan PDO, ubah menjadi '127.0.0.1' 8. $config['db']['server'] = 'localhost'; 9. 10. //sesuaikan dengan user yang ada di database mysql anda 11. $config['db']['user'] = 'root'; 12. 13. //sesuaikan dengan password mysql anda 14. $config['db']['password'] = ''; 15. 16. //sesuaikan dengan nama database yang anda buat 17. $config['db']['database'] = 'coba'; 18. ?>
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
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
1. __construct : adalah fungsi konstruktor yang berisi deklarasi perintah yang jalan otomatis ketika pertama kali aplikasi
dijalankan
2. index : adalah fungsi default yang akan menampilkan data dan tampilan awal dari aplikasi
3. edit : adalah fungsi yang bertugas menampilkan data yang akan di-edit/dirubah
4. simpan : adalah fungsi yang menangani penyimpanan data, baik itu data baru ataupun data lama yang akan
diubah/update
5. hapus : adalah fungsi yang menangani penghapusan data dari database
Adapun script controller page tersebut terlihat seperti dibawah ini
view plain print ?
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';
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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'){ 56. $result = $this->guestbook_model->InsertData($data); 57. if($result==1) { 58. echo "<h2>Sukses Menambah Buku Tamu</h2>"; 59. echo "<p><a href='".this()->base_url."/bukutamu/page'>Kembali ke halam
an depan</a></p>"; 60. } 61. } else if($status == 'edit'){ 62. $result = $this->guestbook_model->UpdateData($data, array('id'=> $id)); 63. if($result==1) { 64. echo "<h2>Sukses Merubah Buku Tamunya $nama</h2>"; 65. echo "<p><a href='".this()->base_url."/bukutamu/page'>Kembali ke halam
an depan</a></p>"; 66. } 67. }//end if edit 68. 69. }//end simpan 70. function hapus($id){ 71. $result = $this->guestbook_model->DeleteData(array('id'=> $id)); 72. if($result==1) { 73. echo "<h2>Sukses Menghapus Buku Tamu</h2>"; 74. echo "<p><a href='".this()->base_url."/bukutamu/page'>Kembali ke halaman d
epan</a></p>"; 75. } 76. } 77. } 78. ?>
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. __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)
2. GetData : bertugas untuk meng-eksekusi perintah SELECT yang berfungsi untuk mengambil data dari database
3. InserData : bertugas meng-eksekusi perintah penyimpanan data baru(INSERT)
4. UpdateData : bertugas untuk mengeksekusi perintah perubahan (UPDATE) data
5. DeleteData : bertugas untuk mengeksekusi perintah penghapusan (DELETE) data
Adapun script model guestbook_model tersebut terlihat seperti dibawah ini
view plain print ?
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=""){
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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); 15. } 16. function DeleteData($where){ 17. return $this->db->delete('guestbook', $where); 18. } 19. } 20. ?>
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 plain print ?
1. <html> 2. <head> 3. <title>Buku Tamu Sederhana</title> 4. </head> 5. <body> 6. <h2>Buku Tamu Sederhana</h2> 7. <h3>Isi Buku Tamu</h3> 8. <form method="POST" action="<?php echo this()->base_url;?>/bukutamu/page/simpan"> 9. <p><input type="text" name="nama" size="40" value="<?php echo $nama;?>" /
><label>Nama</label></p> 10. <p><input type="text" name="email" size="40" value="<?php echo $email;?>" /
><label>Email</label></p> 11. <label>Isi</label> 12. <p><textarea name="isi" rows="5" cols="40"><?php echo $isi;?></textarea></p> 13. <input type="hidden" name ="id" value="<?php echo $id;?>" /> 14. <input type="hidden" name ="status" value="<?php echo $status;?>" /> 15. <p><input type="submit" value="simpan"></p> 16. </form> 17. <h3>Daftar Buku Tamu</h3> 18. <table border="1" width="100%" style="border-collapse:collapse;"> 19. <tr> 20. <th>ID</th> 21. <th>Nama</th> 22. <th>Email</th> 23. <th>Isi</th> 24. <th>Tgl Posting</th> 25. <th>Operasi</th> 26. </tr> 27. <?php 28. foreach($daftar_bukutamu as $d) { 29. ?> 30. <tr> 31. <td><?php echo $d['id'];?></td> 32. <td><?php echo $d['nama'];?></td> 33. <td><?php echo $d['email'];?></td> 34. <td><?php echo $d['isi'];?></td> 35. <td><?php echo $d['tgl_posting'];?></td> 36. <td align="center">
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
37. <a href="<?php echo this()->base_url.'/bukutamu/page/edit/'.$d['id'];?>">Edit</a> -
38. <a href="<?php echo this()->base_url.'/bukutamu/page/hapus/'.$d['id'];?>" onclick="return confirm('Anda yakin akan menghapus data ini?')">Hapus</a>
39. </td> 40. </tr> 41. <?php 42. }//end foreach 43. ?> 44. </table> 45. <p>Waktu komputasi 0.0163 detik. Kebutuhan memory 1.76 MB</p> 46. </body> 47. </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.
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
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 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 plain print ?
1. <?php 2. $config = array(); 3. 4. // jika ingin menggunakan klasik ubah mejadi 'mysql' 5. $config['db']['type'] = 'mysql_pdo'; 6. 7. // jika anda menggunakan klasik, ubah menjadi 'localhost' 8. $config['db']['server'] = '127.0.0.1'; 9. 10. //sesuaikan dengan user yang ada di database mysql anda 11. $config['db']['user'] = 'root'; 12. 13. //sesuaikan dengan password mysql anda 14. $config['db']['password'] = ''; 15. 16. //sesuaikan dengan nama database yang anda buat 17. $config['db']['database'] = 'coba'; 18. ?>
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,
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30
Tole Doelkamit
http://blogkomputer.com/sampul-tutorial-membangun-hmvc-php-framework.htmlTanggal 12-November 2013 Pukul 18:30