Quelqu'un peut-il m'aider à me diriger vers un didacticiel, une bibliothèque, etc. qui me permettra de travailler avec MongoDB de CodeIgniter?
Je ne sais pas si c'est la "manière CodeIgniter" mais j'ai créé une bibliothèque CodeIgniter qui étend la classe Mongo avec une propriété supplémentaire pour stocker la connexion à la base de données actuelle.
Voici les fichiers de code pertinents de mon projet.
config/mongo.php
$config['mongo_server'] = null;
$config['mongo_dbname'] = 'mydb';
bibliothèques/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;
}
}
Et un exemple de contrôleur
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 est très bien supporté au sein de la communauté CodeIgniter, prenez le temps et plongez dans: p
J'aime l'exemple de Stephen Curran car il est simple et permet une interface vers Mongo sans trop de fonctionnalités écrites dans Php, j'ai tendance à trouver d'énormes clusters d'abstraction un peu souvent pour ce que je recherche.
J'ai étendu son exemple pour inclure l'authentification de la base de données. Allez ici: http://www.mongodb.org/display/DOCS/Security+and+Authentication pour en savoir plus sur l'authentification mongo, n'oubliez pas d'activer l'authentification pour le serveur Mongo auquel vous vous connectez .
J'ai également changé l'ancienne fonction de constructeur de style pour qu'elle soit __construct et je gère les exceptions de connexion Mongo car elles peuvent révéler votre nom d'utilisateur et votre mot de passe.
<?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 */
<?php
class 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'));
}
}
}
Travailler avec MongoDB dans CodeIgniter ne serait pas très différent de travailler avec lui ailleurs.
Vous pouvez assembler une bibliothèque MongoDB qui se connecterait au constructeur et stockerait $ this-> conn pour être utilisée plus tard dans les méthodes.
alors travaillez directement avec la propriété conn dans vos contrôleurs ou créez quelques méthodes dans votre bibliothèque MongoDB pour le faire pour vous.
Jetez un oeil ici pour voir le tutoriel simple PHP pour travailler avec MongoDB.
Je serais ravi de vous créer une bibliothèque pour cela, mais cela aurait un prix. :-p
J'utilise MongoDB w/CI et j'ai trouvé ce qui suit. Cela fonctionne pour moi, mais je suis sûr qu'il peut être légèrement modifié. Je vais m'inquiéter de l'ajuster plus tard, mais en ce moment, il fait ce que je veux.
J'ai créé un modèle appelé "database_conn.php"
class Database_Conn extends Model {
function _connect() {
$m = new Mongo();
$db = $m->selectDB( "YOUR DATABASE NAME" );
return $db;
}
}
Ensuite, si je dois me connecter à une collection de mes modèles.
$collection = Database_Conn::_connect()->selectCollection( "COLLECTION NAME" );