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