Fitur hook yang disediakan pada CodeIgniter sebenarnya memungkinkan kita untuk sedikit melakukan hack pada proses yang berjalan pada aplikasi yang kita buat, tanpa harus mengubah skrip pada file inti CodeIgniter. Misalnya saja, kita ingin membuat sebuah log untuk menyimpan data URL apa saja yang diakses oleh pengguna, mendata setiap pengunjung yang mengakses halaman, dll.
Dalam kasus dibawah ini kita akan menggunakan fitur hook untuk mengatur konfigurasi aplikasi berdasarkan konfigurasi yang kita simpan di database.
Langkah-langkahnya adalah sebagai berikut:
Langkah-langkahnya adalah sebagai berikut:
- Membuat tabel
app_config
untuk menyimpan konfigurasi aplikasi kitaCREATE TABLE IF NOT EXISTS `app_config` ( `key` varchar(255) NOT NULL, `value` varchar(255) NOT NULL, PRIMARY KEY (`key`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-
Memasukkan data konfigurasi awal kedalam tabel yang telah kita buat
INSERT INTO `app_config` (`key`, `value`) VALUES ('address', 'Griya Wilis Indah'), ('company', 'Belva Tekindo'), ('email', ''), ('fax', ''), ('language', 'indonesia'), ('phone', ''), ('timezone', 'Asia/Bangkok'), ('version', '1.0');
-
Membuat file
application/models/m_appconfig.php
untuk mengakses tabel yang telah kita buat<?php class M_appconfig extends CI_Model { function get_all() { $this->db->from('app_config'); $this->db->order_by("key", "asc"); return $this->db->get(); } } /* End of file m_appconfig.php */ /* Location: ./application/models/m_appconfig.php */
-
Menambahkan model
M_appconfig
pada fileapplication/config/autoload.php
agar di load otomatis
$autoload['model'] = array('M_appconfig');
-
Membuat file
application/hooks/load_config.php
<?php function load_config() { $CI =& get_instance(); //Memuat konfigurasi dari database kefalam konfigurasi global CI foreach($CI->M_appconfig->get_all()->result() as $app_config) { $CI->config->set_item($app_config->key,$app_config->value); } //Set konfigurasi timezone CI dengan konfigurasi dari database if ($CI->config->item('timezone')) { date_default_timezone_set($CI->config->item('timezone')); } } /* End of file load_config.php */ /* Location: ./application/hooks/load_config.php */
-
Mengaktifkan fitur ini pada file
application/config/config.php
seperti berikut:
$config['enable_hooks'] = TRUE ;
-
Mendefinisikan hook yang akan digunakan pada saat aplikasi kita dijalankan. Buka file
application/config/hooks.php
untuk menambah hook baru.
$hook['post_controller_constructor'] = array( 'class' => '', 'function' => 'load_config', 'filename' => 'load_config.php', 'filepath' => 'hooks' );
post_controller_constructor
. Berikut penjelasan ketujuh poin tersebut.
- pre_system
Kelas dan metode hook kita akan dijalankan sebelum sistem dieksekusi. Berdasar dokumentasi CodeIgniter, hanya kelas Benchmark dan Hook yang dijalankan pada poin ini. - pre_controller
Kelas dan metode hook akan dijalankan sebelum controller kita dipanggil. Semua base class, routing dan security sudah dipanggil pada poin ini. - post_controller_constructor
Akan dipanggil ketika konstruktor controller dijalankan, tapi sebelum metode controller dipanggil. - post_controller
Akan dipanggil ketika controller sudah benar-benar dijalankan. - display_override
Memungkinkan kita untuk menentukan metodologi display sesuai dengan keinginan kita. - cache_override
Mengijinkan kita untuk menampilkan mekanisme cache sesuai dengan keinginan kita. - post_system
Dijalankan ketika halaman berhasil dikirim ke browser.