Plugin MongoDB en CakePHP

En el anterior artículo concluíamos la instalación de la extensión para PHP de MongoDB. Lo que nos falta ahora es integrarlo como datasource en CakePHP y hacer las comprobaciones acerca de su correcto funcionamiento, para lo que recurriremos al plugin MongoDB para CakePHP.

La versión de CakePHP con la que trabajamos y sobre la que realizaremos esta configuración es la 2.4.

Para hacer las pruebas, hemos creado un proyecto nuevo, “pruebamongo”, a través de la consola de Cake:

$ cake bake project pruebamongo

Si lanzamos la aplicación en el navegador, nos aparece un aviso indicando que no tenemos configuración de base de datos.

Seisunos blog - cakephp

A continuación, descargaremos el ZIP del plugin de ichikaway de su página de Github, lo descomprimiremos dentro de la carpeta “Plugin” de nuestra nueva aplicación y renombraremos la carpeta del plugin de “cakephp-mongodb-cake2.2” a “Mongodb”.

Lo siguiente es ya configurar nuestra aplicación para que cargue el plugin. Para ello editamos el fichero \Config\bootstrap.php y en la sección de plugins (línea 65 aproximadamente) añadimos la carga del plugin Mongodb:

CakePlugin::load('Mongodb');

O directamente cargamos todos los plugin:

CakePlugin::loadAll();

Crearemos un fichero database.php en la carpeta \Config y le añadiremos la configuración del datasource de nuestra aplicación, apuntando a la base de datos MongoDB:

<?php
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Mongodb.MongodbSource',
'host' => 'localhost',
'database' => 'pruebamongo',
'port' => 27017,
'prefix' => '',
'persistent' => 'true'
);
}

Como ya veíamos en el segundo artículo de esta serie, en mongo no es necesario crear bases de datos previamente, tal y como sucedía, por ejemplo, con MySQL, sino que la simple utilización de la misma, provoca que mongo la genere cuando ésta no exista.

Si actualizamos nuestra aplicación en el navegador vemos dos cambios: primero, un error que se produce en el plugin por una declaración que no es compatible con el prototipo:

Strict (2048): Declaration of MongodbSource::group() should be compatible with DboSource::group($group, $model = NULL) [APP\Plugin\Mongodb\Model\Datasource\MongodbSource.php, line 36] 

y segundo, la notificación de conexión correcta con la base de datos:

Seisunos blog - cakephp

En la página del plugin se comenta sobre el error y hay un debate sobre versiones de Cake y versiones del plugin. La solución más rápida es modificar la declaración para hacerla compatible con el prototipo de la función DboSource::group(). Para ello, accedemos al fichero que se menciona en el error, lo editamos y localizamos la función “group” (línea 671) y vemos la declaración como:

public function group($params, Model $Model = null)

Y si revisamos la función original DboSource::group en la librería DboSource de nuestra versión de Cake, vemos que su declaración es:

public function group($group, $model = null)

Por lo que la solución pasaría por deja la declaración en el plugin como:

public function group($params, $Model = null)

Con este cambio, la aplicación estaría funcionando correctamente:

Seisunos blog - cakephp

 

Referencias:
https://github.com/ichikaway/cakephp-mongodb

Related posts

2 Comments

  • Posted 7 October, 2016

    posicionamiento seo reus

    No habia vuelto a leer tu sitio web por un tiempo, porque me pareció que era pesado, pero los últimos articulos son de buena calidad, así que supongo que voy a añadirte a mi lista de sitios web cotidiana. Te lo mereces amigo. 🙂

    Saludos

    • Posted 11 October, 2016

      admin

      ¡Muchas gracias!. Aquí estamos para lo que necesites. Un saludo

Leave a Reply