web-dev-qa-db-fra.com

MongoDB et CodeIgniter

Quelqu'un peut-il m'aider à me diriger vers un didacticiel, une bibliothèque, etc. qui me permettra de travailler avec MongoDB de CodeIgniter?

51
IEnumerator

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);
    }
}
51
Stephen Curran
14
sepehr

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.

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 */

bibliothèques/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'));           
        }
    }
}
10
Luke Tarplin

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

6
Phil Sturgeon

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" );
2
luckytaxi