MongoDB and CodeIgniter [closed]
I'm not sure if its the "CodeIgniter way" but I created a CodeIgniter library that extends the Mongo class with an extra property to store the current database connection.
Here are the relevant code files from my project.
config/mongo.php
$config['mongo_server'] = null;$config['mongo_dbname'] = 'mydb';
libraries/Mongo.php
class CI_Mongo extends Mongo{ var $db; function CI_Mongo() { // Fetch CodeIgniter instance $ci = get_instance(); // Load Mongo configuration file $ci->load->config('mongo'); // Fetch Mongo server and database configuration $server = $ci->config->item('mongo_server'); $dbname = $ci->config->item('mongo_dbname'); // Initialise Mongo if ($server) { parent::__construct($server); } else { parent::__construct(); } $this->db = $this->$dbname; }}
And a sample controller
controllers/posts.php
class Posts extends Controller{ function Posts() { parent::Controller(); } function index() { $posts = $this->mongo->db->posts->find(); foreach ($posts as $id => $post) { var_dump($id); var_dump($post); } } function create() { $post = array('title' => 'Test post'); $this->mongo->db->posts->insert($post); var_dump($post); }}
MongoDB is very well supported within CodeIgniter community, take the time and dive in :p
- CodeIgniter MongoDB Active Document Library [BROKEN LINK]
- CodeIgniter MongoDB Session Library [OBSOLETE]
- CodeIgniter MongoDB Authentication Library [OBSOLETE]
- CodeIgniter MongoDB REST Server Library [OBSOLETE]
- CodeIgniter MongoDB Base Model [OBSOLETE]
I like Stephen Curran's example as it is simple and allows an interface to Mongo without too much functionality written within Php, I tend to find huge abstraction clases a bit much at times for what I am after.
I have extended his example to include database authentication. Go here: http://www.mongodb.org/display/DOCS/Security+and+Authentication to read about mongo authentication, don't forget to enable authentication for the Mongo Server you are connecting to.
I have also changed the old style constructor function to be __construct and am handling Mongo Connection Exceptions as they can reveal your username and password.
config/mongo.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');$config['mongo_server'] = 'localhost';$config['mongo_dbname'] = 'my_mongo_db';$config['mongo_username'] = 'mongo_user';$config['mongo_password'] = 'password1234';/* End of file mongo.php */
libraries/Mongo.php
<?phpclass CI_Mongo extends Mongo{ protected $db; function __construct() { // Fetch CodeIgniter instance $ci = get_instance(); // Load Mongo configuration file $ci->load->config('mongo'); // Fetch Mongo server and database configuration $server = $ci->config->item('mongo_server'); $username = $ci->config->item('mongo_username'); $password = $ci->config->item('mongo_password'); $dbname = $ci->config->item('mongo_dbname'); // Initialise Mongo - Authentication required try{ parent::__construct("mongodb://$username:$password@$server/$dbname"); $this->db = $this->$dbname; }catch(MongoConnectionException $e){ //Don't show Mongo Exceptions as they can contain authentication info $_error =& load_class('Exceptions', 'core'); exit($_error->show_error('MongoDB Connection Error', 'A MongoDB error occured while trying to connect to the database!', 'error_db')); }catch(Exception $e){ $_error =& load_class('Exceptions', 'core'); exit($_error->show_error('MongoDB Error',$e->getMessage(), 'error_db')); } }}