php - not - MongoDB y CodeIgniter
mongodb codeigniter (5)
Estoy usando MongoDB w / CI y se me ocurrió lo siguiente. Funciona para mí, pero estoy seguro de que puede modificarse un poco. Me preocuparé por ajustarlo más tarde, pero ahora hace lo que quiero.
Creé un modelo llamado "database_conn.php"
class Database_Conn extends Model {
function _connect() {
$m = new Mongo();
$db = $m->selectDB( "YOUR DATABASE NAME" );
return $db;
}
}
Entonces, si necesito conectarme a una colección de mis modelos.
$collection = Database_Conn::_connect()->selectCollection( "COLLECTION NAME" );
¿Alguien puede ayudarme apuntando a un tutorial, biblioteca, etc. que me permita trabajar con MongoDB desde CodeIgniter?
Me gusta el ejemplo de Stephen Curran, ya que es simple y permite una interfaz para Mongo sin demasiada funcionalidad escrita dentro de Php, tiendo a buscar grandes clases de abstracción un poco demasiado a veces por lo que busco.
He extendido su ejemplo para incluir autenticación de base de datos. Vaya aquí: http://www.mongodb.org/display/DOCS/Security+and+Authentication para leer acerca de la autenticación mongo, no olvide habilitar la autenticación para el servidor Mongo al que se está conectando.
También he cambiado la función del constructor de estilo anterior para que sea __construct y estoy manejando las Excepciones de conexión de Mongo, ya que pueden revelar su nombre de usuario y contraseña.
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 */
bibliotecas / 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''));
}
}
}
MongoDB está muy bien soportado dentro de la comunidad CodeIgniter, tómate tu tiempo y sumérgete en: p
No estoy seguro de si es el "modo CodeIgniter", pero creé una biblioteca CodeIgniter que amplía la clase Mongo con una propiedad adicional para almacenar la conexión de la base de datos actual.
Aquí están los archivos de código relevantes de mi proyecto.
config / mongo.php
$config[''mongo_server''] = null;
$config[''mongo_dbname''] = ''mydb'';
bibliotecas / 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;
}
}
Y un controlador de muestra
controladores / 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);
}
}
Trabajar con MongoDB en CodeIgniter no sería muy diferente de trabajar con él en cualquier otro lugar.
Podrías juntar una biblioteca MongoDB que se conectara en el constructor y almacenara $ this-> conn para ser usada en métodos más adelante.
luego, trabaje directamente con la propiedad conn en sus controladores o cree unos pocos métodos en su biblioteca MongoDB para hacer esto por usted.
Eche un vistazo here para ver el sencillo tutorial de PHP para trabajar con MongoDB.
Con mucho gusto te crearía una biblioteca para esto pero vendría con un precio. :-pag