it-swarm.com.ru

MongoDB и CodeIgniter

Может ли кто-нибудь помочь мне указать учебник, библиотеку и т.д., Которые позволят мне работать с MongoDB из CodeIgniter?

51
IEnumerator

Я не уверен, что это "путь CodeIgniter", но я создал библиотеку CodeIgniter, которая расширяет класс Mongo дополнительным свойством для хранения текущего подключения к базе данных.

Вот соответствующие файлы кода из моего проекта.

конфигурации/mongo.php

$config['mongo_server'] = null;
$config['mongo_dbname'] = 'mydb';

библиотеки/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;
    }
}

И образец контроллера

контроллеры/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

Мне нравится пример Стивена Керрана, так как он прост и допускает интерфейс к Mongo без слишком большой функциональности, написанной на Php, я склонен иногда находить огромные абстракционные предложения для того, чего я добиваюсь.

Я расширил его пример, включив аутентификацию базы данных. Зайдите сюда: http://www.mongodb.org/display/DOCS/Security+and+Authentication чтобы прочитать об аутентификации mongo, не забудьте включить аутентификацию для сервера Mongo, к которому вы подключаетесь ,.

Я также изменил функцию конструктора старого стиля на __construct и обрабатываю исключения подключения Mongo, так как они могут раскрыть ваше имя пользователя и пароль.

конфиг/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 */

библиотеки/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:[email protected]$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

Работа с MongoDB в CodeIgniter не сильно отличается от работы с ней где-либо еще.

Вы можете собрать библиотеку MongoDB, которая будет соединяться в конструкторе и хранить $ this-> conn для последующего использования в методах.

затем либо работайте напрямую со свойством conn в ваших контроллерах, либо создайте несколько методов в библиотеке MongoDB, чтобы сделать это для вас.

Посмотрите здесь чтобы увидеть простое PHP руководство по работе с MongoDB.

Я бы с радостью создал для вас библиотеку, но за это пришлось бы платить. :-п

6
Phil Sturgeon

Я использую MongoDB с CI и придумал следующее. Это работает для меня, но я уверен, что это может быть несколько подправлено. Я буду беспокоиться о том, чтобы настроить его позже, но сейчас он делает то, что я хочу.

Я создал модель под названием "database_conn.php"

class Database_Conn extends Model {

    function _connect() {
        $m = new Mongo();

        $db = $m->selectDB( "YOUR DATABASE NAME" );
        return $db;
    }
}

Затем, если мне нужно подключиться к коллекции из моих моделей.

$collection = Database_Conn::_connect()->selectCollection( "COLLECTION NAME" );
2
luckytaxi