jueves, 20 de noviembre de 2008

Integrando CodeIgniter y Doctrine: Segunda vuelta

Como prometí aquí está el tutorial para integrar la consola de Doctrine en una instalación de CodeIgniter

Para empezar, yo tomé la decisión arbitraria de colocar los ejecutables al mismo nivel que index.php (el front-controller de CI).
Hecha la aclaración, comenzamos.

Paso 1: doctrine.php



Este archivo va a ser el encargado de inicializar doctrine y obtener la información correspondiente de los archivos de configuración que creamos en el anterior tutorial.

[DocumentRoot]/doctrine.php
<?php

# Estos parametros son identicos a los que tenemos en index.php
$system_folder = "system";
$application_folder = "application";

if (strpos($system_folder, '/') === FALSE)
{
if (function_exists('realpath') AND @realpath(dirname(__FILE__)) !== FALSE)
{
$system_folder = realpath(dirname(__FILE__)).'/'.$system_folder;
}
}
else
{
// Swap directory separators to Unix style for consistency
$system_folder = str_replace("\\", "/", $system_folder);
}

define('BASEPATH', $system_folder.'/');

if (is_dir($application_folder))
{
define('APPPATH', $application_folder.'/');
}
else
{
if ($application_folder == '')
{
$application_folder = 'application';
}

define('APPPATH', BASEPATH.$application_folder.'/');
}

include(APPPATH . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'doctrine.php');

require_once($config["doctrine_path"]);

spl_autoload_register(array('Doctrine', 'autoload'));

include(APPPATH . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'database.php');

$doctrine_group = $active_group;
//$doctrine_group = 'doctrine_custom_group';

$dsn = $db[$doctrine_group]['dbdriver'] .
'://' . $db[$doctrine_group]['username'] .
':' . $db[$doctrine_group]['password'].
'@' . $db[$doctrine_group]['hostname'] .
'/' . $db[$doctrine_group]['database'];


Doctrine_Manager::connection($dsn);

$cli = new Doctrine_Cli($config);
$cli->run($_SERVER['argv']);

?>


La primera parte corresponde a la inicialización de las variables de CI y es identica a la primera parte del archivo index.php provisto por CodeIgniter.

Luego se incluye el archivo de configuracion de doctrine (que creamos en el tutorial anterior) y la configuracion de la base de datos

Paso 2: los ejecutables



Hasta ahora es perfectamente posible usar un comando como /sbin/php -f doctrine.php parametros... etc
pero siempre resulta más cómodo tener un script ejectuable a mano

Como esta implementación la tengo corriendo en un servidor con windows pero la desarrolle en una maquina con linux, tengo preparado el script para ambas versiones.
En ambos casos, es necesario ajustar la ruta hasta o incluso el nombre del ejecutable de php

Unix: ./doctrine

Creamos un archivo doctrine con permisos de ejecucion en el mismo directorio que doctrine.php del paso anterior.

#!/usr/bin/env php
<?php
chdir(dirname(__FILE__));
include('doctrine.php');


Windows: doctrine.bat

Creamos un archivo doctrine.bat en el mismo directorio que el archivo doctrine.php que creamos en el paso 1

@C:\ruta\al\archivo\php.exe -r "chdir(dirname(__FILE__));include('doctrine.php');"

...y ya está.

Dos sencillísimos pasos y tenemos la consola de Doctrine corriendo con CI.

Lamentablemente la consola de Windows pierde todos los estilos que tiene la de Unix. Supongo qeu habrá alguna forma de solucionar esto último, pero personalmente no es algo que me preocupe.
Si alguien tiene una solución, los invito a postearla en los comentarios

No hay comentarios:

Publicar un comentario