Utilizar cakephp sin base de datos
Martes, 28 Abril 2009
Hay ocasiones en las que se puede dar que nos enfrentemos a un proyecto que no necesita tener una base de datos asociada, bien porque es un proyecto sencillo, bien porque no requiere tener datos almacenados o simplemente porque el servidor en el que vamos a alojar la aplicación no dispone de una base de datos.
Esta razón no deberá ser un impedimento para seguir utilizando cakephp, con unos pequeños cambios podremos seguir usándolo normalmente.
En primer lugar tendremos que crear un nuevo datasource, estos ficheros van almacenados en el directorio “/app/models/datasources/dbo/”, será un fichero php cuyo nombre comience por dbo_, en nuestro caso lo llamaremos “dbo_mi_dbo.php”.
Tendrá el siguiente contenido:
class DboMiDbo extends DboSource
{
function connect()
{
$this->connected = true;
return $this->connected;
}
function disconnect()
{
$this->connected = false;
return !$this->connected;
}
}
Después de esto tendremos que cambiar el driver de la base de datos utilizada por nuestro proyecto cakephp, por defecto mysql. Para esto, en el archivo database.php que se encuentra en “/app/config/”, modificamos la variable $default, debería quedar así:
var $default = array( 'driver' => 'mi_dbo', 'persistent' => false, 'host' => '', 'port' => '', 'login' => '', 'password' => '', 'database' => '', 'schema' => '', 'prefix' => '', 'encoding' => '' );
Por último, en todos los modelos que creemos, tendremos que añadir la línea “var $useTable = false;“, para indicarle que ese modelo no va a tener una tabla asociada.
A partir de aquí podremos utilizar toda la potencia de cakephp sin preocuparnos de tener una base de datos instalada.

No. 1 — Abril 29th, 2009 a 8:35 pm
Hola! estoy en la fase de leer sobrecakephp; e ir haciendo ejemplos y demás antes de ponerme con un proyecto en serio; asi que puede que lo que voy a decir no sea correcto, pero no valdría sólo con poner en los modelos el $useTable=false? Es más si tienes una instalación del proyecto con el core de cakephp en la misma carpeta; y solo lo vas a utilizar para ese proyecto no te valdría con ponerlo una sola vez en la clase AppModel?
Un saludo.
No. 2 — Abril 30th, 2009 a 7:50 am
Es verdad que podría funcionar poniendo sólo $useTable=false en todos los modelos, aunque con matices, para ello tendríamos que tener instalado en nuestro servidor,como mínimo php-mysql, si no fuese así, obtendríamos un mensaje de error fatal cuando cakephp intentase utilizar las funciones propias del módulo.
Pongámonos en que el entorno de producción si tiene instalado el módulo php-mysql, en este caso tendrías configurado el database.php para que cake se conectase a una base de datos mysql inexistente, configuración que viene por defecto en cakephp. Por ello, recibiríamos en cada página un mensaje de warning, indicando que la conexión mysql ha fallado, estos mensajes desaparecen una vez que el nivel de debug está en modo producción (0), pero siempre será recomendable evitar los mensajes de warning, porque aunque la página siga funcionando quiere decir que algo está mal configurado.
La idea de añadir un nuevo datasource, que únicamente engaña a cake diciéndole que el datasource está conectado, es para evitarnos estos mensajes, para no tener que preocuparnos del software instalado en el servidor donde vamos a alojar la página y para poner un ejemplo sencillo de cómo se crea un datasource.
A partir de este ejemplo se podrían crear ejemplos más complejos, como utilizar cakephp con archivos xml o con archivos de texto plano, pero eso en otro capítulo.
No. 3 — Abril 30th, 2009 a 2:07 pm
gracias por la explicación, bien argumentada y al grano.
un saludo.
No. 4 — Abril 30th, 2009 a 2:17 pm
off-topic. He visto un post donde mencionais que podemos preguntaros dudas o proponer temas.. pero no he encontrado ningun email de contacto (no he mirado muxo, pero no quiero que se me olvide asi que os lo pregunto ya),.¿que entorno de desarrollo utilizais? ¿que herramienta utilizais para depurar los proyectos hechos en cakephp?
yo utilizo eclipse+xdebug, pero no he conseguido depurar bien del todo, alguna sugerencia?
No. 5 — Abril 30th, 2009 a 3:57 pm
La mayoría de nosotros utilizamos eclipse en ubuntu y como herramienta de depuración, utilizamos el propio debug de cakephp, yo ya me he ocostumbrado y me resulta cómoda la manera que tiene de mostrar cakephp las variables con esa función en el navegador.
En cuanto a proponer dudas, puedes escribirnos a cakephp@hospedaxes.com, estaremos encantados de escuchar tus propuestas de nuevos temas e intentar resolver tus dudas.
Un saludo.
Please continue discussion on the forum: link