• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
Zirtrex

Zirtrex

Audio, Video, Código y Más

  • Inicio
  • Nuestros Servicios
  • Blog
  • Tutoriales
  • Contacto
  • Show Search
Hide Search

Integrar MongoDB con Zend Framework 3

Rafael Contreras · Oct 8, 2017 · Leave a Comment

Es más que claro que el uso de las tecnologías NOSQL está creciendo exponencialmente en los últimos años, por lo tanto surge la necesidad de ponerse al corriente y que mejor que MongoDB para dar inicio a está nueva aventura, yo suelo programar en PHP usando Zend Framework 3, y siempre he usado una base de datos relacional como MySQL, pero ahora por diferentes razones necesito usar MongoDB así que les dejo de forma sencilla y funcional como Integrar MongoDB y Zend Framework 3

Nota:

Vale resaltar que la forma más recomendada de usar MongoDB y Zend Framework es a través de Doctrine/MongoDB, lo cual es objeto de estudio por su propia cuenta.

En mi caso usaré la librería MongoDB para PHP.

Este tutorial ha sido creado usando:

  • PHP 7.1.4
  • MongoDB 3.4.9
  • Driver PHP_MONGODB 1.3.0
  • PHPLIB 1.1.2
  • Zend Framework 3

Empecemos:

1) Tenemos que asegurarnos que tenemos el driver de MongoDb instalado en nuestro php, si no estamos seguros podemos ejecutar un php info y asegurarnos.

2) Si aún no tenemos instalado el Driver de MongoDB para PHP lo podemos descargar desde: https://pecl.php.net/package/mongodb

Tenemos que elegir la opción que se adapte a sus características, por ejemplo yo use le versión 1.3.0 para MongoDb 3.4.9 si tienen una versión superior o inferior deben elegir la más adecuada a sus necesidades.

Si estamos usando Window debes clickar en la opción DLL ello nos llevará a la siguiente página: https://pecl.php.net/package/mongodb/1.3.0/windows debemos desplazarnos hasta el apartado DLL List

Luego eligan la versión de PHP que usen y descargen, aquí debo hacer una aclaración solo descarguen la opción Thread Safe (TS) debido a que Non Thread Safe no funciona correctamente. Una vez descargado el archivo correctamente deben descomprimir y copiar el archivo php_mongodb.dll dentro de la carpeta de extensiones de PHP; en mi caso: C:\xampp\php\ext

Terminado el paso anterior deben abrir el archivo php.ini y agregar si no existe la siguiente linea: extension=php_mongodb.dll Luego reiniciar Apache y tendrán ahora ya instalado el Driver de MongoDB para PHP.

Para mayor información pueden revisar: http://php.net/manual/es/set.mongodb.php

3) En versiones más recientes para poder usar el Driver debemos hacer a través de la Librería de PHP para MongoDB llamada PHPLIB (Lo sé suena muy enredado, pero así es, que le vamos a hacer.) Las instrucciones para usar la librería la tienen en: http://php.net/manual/es/mongodb.tutorial.library.php

En http://php.net/manual/es/mongodb.tutorial.library.php se explica claramente como instalar la librería PHPLIB 1.0, en mi caso yo he instalado la última versión 1.1.2 (Octubre 2017) por lo que se darán cuenta que si ejecutan el siguiente código (ver imagen) no funcionará

Source code   
<?php
 
require 'vendor/autoload.php'; // incluir lo bueno de Composer
$cliente = new MongoDB\Client("mongodb://localhost:27017");
$colección = $cliente->demo->beers;
$resultado = $colección->insertOne( [ 'name' => 'Hinterland', 'brewery' => 'BrewDog' ] );
echo "Inserted with Object ID '{$resultado->getInsertedId()}'";
?>

Por tal motivo si usas la versión 1.1.2 debes guiarte de la siguiente documentación: http://php.net/manual/en/class.mongodb-driver-manager.php

Yo he creado el siguiente código para hacer una pequeña consulta la base de datos y asegurarme que funcione.

Source code   
<?php
require 'vendor/autoload.php';
try{
// Manager Class
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
// Query Class
$query = new MongoDB\Driver\Query(array('a' => 1));
// Output of the executeQuery will be object of MongoDB\Driver\Cursor class
$cursor = $manager->executeQuery('test.foo', $query);
// Convert cursor to Array and print result
print_r($cursor->toArray());
}catch(MongoConnectionException $e){
die($e->getMessage());
}

Recordar que deben instalar la librería a través de composer y usar con require.

Si todo está correcto deberán observar el siguiente resultado: Array ( [0] => stdClass Object ( [_id] => MongoDB\BSON\ObjectId Object ( [oid] => 59da6ea7d9769de18be8c29b ) [a] => 1 ) )

Antes de ejecutar el código yo he creado una base de datos llamada test y una biblioteca llamada foo con un atributo llamado a y el valor 1

4) Lo anterior fue un ejercicio para pasar ahora a Zend Framework ya que sin los pasos anteriores no podremos usar MongoDb.

Ahora para usar la librería en ZendFramework debemos agregarla de la misma forma, abrimos el archivo composer.json y agregamos la linea: “mongodb/mongodb” : “1.1.2” y actualizamos las dependencias.

5) Ahora dentro de cualquiera de nuestros controladores de Zend Framework 3 podemos ejecutar el siguiente código:

Source code   
<?php
 
namespace Empleos\Controller;
 
 
 
use RuntimeException;
 
use Zend\Mvc\Controller\AbstractActionController;
 
use Zend\View\Model\ViewModel;
 
use MongoDB\Driver\Manager;
 
use MongoDB\Driver\Query;
 
 
 
class MongoController extends AbstractActionController
 
{    
 
    public function indexAction()
 
    {
 
        $manager = new Manager("mongodb://localhost:27017");
 
        $query = new Query(array('a' => 1));
 
        $cursor = $manager->executeQuery('test.foo', $query);
 
 
 
        return new ViewModel([
 
            'cursor' => $cursor->toArray()
 
        ]);
 
    }
 
}

Debemos destacar el uso de MongoDB\Driver\Manager y MongoDB\Driver\Query el uso correcto lo pueden ver en el siguiente enlace: http://php.net/manual/en/book.mongodb.php

El código anterior muestra como salida el siguiente resultado:

Yo adicionalmente he creado una vista y he impreso el valor de cursor que devuelve el valor encontrado.

En resumen el uso es el mismo que haría sin usar Zend Framework 3. Pero como vuelvo a repetir el uso más adecuado es a través de un ORM como Doctrine/MongoDb el cual tienen un tutorial (En inglés) en el siguiente enlace: https://olegkrivtsov.github.io/using-zend-framework-3-book/html/en/Appendix_D__Introduction_to_Doctrine/Doctrine_Architecture.html

Compartir:

  • Twitter
  • Facebook
  • LinkedIn
  • Más
  • Correo electrónico
  • Imprimir

Relacionado

Blog Driver Manager, MongoDb, MongoDb 3.4, PHP7.1, Zend Framework 3

Reader Interactions

Agregue un comentario Cancelar respuesta

Su dirección de correo no se hará público. Los campos requeridos están marcados *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Primary Sidebar

Suscribete

Queremos que estes alerta a las nuevas publicaciones
Correo: rcontreras@zirtrex.net


ZIRTREX

Chincha - Perú

Zirtrex

Copyright © 2019 · Rafael Contreras

loading Cancelar
La entrada no fue enviada. ¡Comprueba tus direcciones de correo electrónico!
Error en la comprobación de email. Por favor, vuelve a intentarlo
Lo sentimos, tu blog no puede compartir entradas por correo electrónico.