Skip to content

Config Extend to Database

julionc edited this page Jul 30, 2012 · 7 revisions

While looking around for usage and performance examples of application configuration should come from a database or file system. I found an interesting example between the pros and cons of each. So whipped out the trusty IDE (PHP Eclipse) and whipped up this simple addition to the core of CI.

class MY_Config extends CI_Config {

/**
 * CodeIgniter Config Extended Library
 *
 * This class extends the config to a database
 *
 * @package        CodeIgniter
 * @subpackage    Extended Libraries
 * @category    Extended Libraries
 * @author        Tim Wood (aka codearachnid)
 * @link        http://www.codearachnid.com/ci/db_fetch
 * 
 * you must have the following structure setup in order to use this class
 * 
    CREATE TABLE IF NOT EXISTS `site_config` (
      `config_id` int(11) NOT NULL auto_increment,
      `last_updated` timestamp NOT NULL default '0000-00-00 00:00:00' on update CURRENT_TIMESTAMP,
      `config_key` varchar(60) NOT NULL,
      `config_value` longtext NOT NULL,
      PRIMARY KEY  (`config_id`)
    ) ENGINE=MyISAM;
 * 
 * 
 */

    function MY_Config()
    {
        parent::CI_Config();
    }
    
    function db_config_fetch()
    {
        $CI =& get_instance();
        $query = $CI->db->get($this->item('dbt_site_config'));
        
        foreach ($query->result() as $row)
        {
            $this->set_item($row->config_key, $row->config_value);
        }
        
    }
    
}
?>

Call in the class constructor for your controller.

$this->config->db_config_fetch();

One last thing - either update where the database name is called from the static var file in the class or just add this to your config file:

$config['dbt_site_config']        = 'site_config';

Clone this wiki locally