Puntos de montaje
Un punto de montaje es un referencia a una ubicación al sistema de archivos. Hasta la versión 1.5 de Toba los proyectos contaban con sólo un punto de montaje implícito, la carpeta php dentro de la carpeta del proyecto. A partir de la versión 2.0 se introduce explícitamente la noción de punto de montaje.
En cada formulario dentro del editor de Toba donde se introducía el path de un archivo ahora hay también un selector de puntos de montaje:
Este selector se utiliza para indicar a Toba la ubicación del archivo. De esta manera se permite el consumo de código externo al mismo proyecto.
Tipos de puntos de montaje
Hay tres tipos de puntos de montaje, cada uno tiene un funcionamiento específico. A continuación se hace un detalle de cada uno.
Proyecto Toba
Estos puntos de montaje pueden apuntar a otros proyectos dentro de la misma instancia. De esta manera se puede consumir código de otros proyectos.
Personalización proyecto Toba
Estos puntos de montaje pueden apuntar a la carpeta personalización de otros proyectos en la misma instancia. De esta manera un proyecto personalizado puede consumir código de otro.
Externo
Estos puntos de montaje pueden apuntar a cualquier ubicación en el sistema de archivo.
Uso
Administración
Los puntos de montaje de un proyecto se administran desde una pantalla en la solapa de configuración de Toba - Editor. A continuación se muestra una captura de esta pantalla:
Esta es la pantalla inicial de la edición de puntos de montaje. En la parte superior se tiene un cuadro mostrando todos los puntos de montaje existentes en el sistema y en la parte inferior se tiene un formulario para el alta de un nuevo punto de montaje.
Hay dos pantallas de alta de puntos de montaje; Una para los internos de Toba (proyectos y personalizaciones) y otra para los externos.
Alta de puntos de montaje de proyecto y personalizaciones
Esta es la pantalla de alta de un punto de montaje de proyecto. Lo único que hay que hacer es definir una etiqueta y seleccionar el proyecto al cuál se quiere referenciar. Adicionalmente se puede agregar una descripción. La etiqueta provee una forma de acceder al punto de montaje desde el código. El manejo de ubicaciones en el sistema de archivos lo hace automáticamente Toba.
La pantalla de alta de un punto de montaje de personalización es análoga.
Alta de puntos de montaje externos
En esta pantalla se debe definir una etiqueta, que cumple la misma función que la los puntos de montaje de proyecto, y un path. Este path debe ser absoluto y apuntar a la carpeta que contiene el código que se quiere referenciar.
Utilización
A continuación veremos porciones de código para utilizar correctamente los puntos de montaje; de nuevo separamos en dos secciones, una para los puntos de montaje de proyecto y personalizaciones y otra para los puntos de montaje externos.
Proyecto y personalización
Supongamos que queremos consumir código de otro proyecto y que ya dimos de alta el punto de montaje en la pantalla de alta de los mismos. Para esto debemos seguir el siguiente patrón de código:
<?php
class clase_ejemplo
{
function ejemplo()
{
$pm = toba::puntos_montaje()->get('referencia');
$pm->registrar_autoload(); // registramos el autoloader del proyecto
// Todo el código que se introduzca aquí va a poder referenciar a todas
// las clases e interfaces del proyecto al que apunta el punto de montaje
$pm->desregistrar_autoload(); // desregistramos el autoloader del proyecto
}
...
La llamada a toba::puntos_montaje()->get('referencia');
obtiene
el punto de montaje a partir de la etiqueta pasada como parámetro, en
nuestro caso referencia. Luego se registra el autoloader del
proyecto referenciado a través de la llamada
$pm->registrar_autoload();
, esto ubica el archivo de autoload del
otro proyecto y lo carga (ver autoload). Después se
insertan el código que referencia a otro proyecto y por último se
desregistra el autoloader, con la línea
$pm->desregistrar_autoload();
, para que no haya colisión de
clases.
Externos
Los puntos de montaje externos no proveen una funcionalidad de autoload ya que es imposible conocer el esquema de autoloading de un proyecto desconocido, si es que lo tiene. Por lo tanto se proveen primitivas para acceder al path del proyecto externo y de esta manera no escribir en código la ubicación de cada proyecto ya que esta puede cambiar dependiendo la instalación. Ejemplo de uso:
<?php
class clase_ejemplo
{
function ejemplo()
{
$pm = toba::puntos_montaje()->get('libreria_externa'); // cargamos el punto de montaje con id 'libreria_externa'
require_once($pm->get_path_absoluto().'/clase.php'); // incluimos la clase a utilizar
$clase = new clase(); // en este punto ya podemos crear la clase
}
...
El funcionamiento de estos puntos de montaje difiere al de los de proyecto y personalización en que la información es guardada en el archivo instancia.ini en vez de en la base de datos. Esto provoca que el path del punto de montaje no se exporte y por lo tanto quede indefinido en cada instalación. Cuando Toba trata de obtener un punto de montaje externo que no tiene definido el path en instancia.ini muestra un mensaje de error explicando como definir el path. A continuación se muestra una captura de pantalla de ese error:
Notemos que las apariciones de 'proyecto' y 'path/a/instancia.ini' serán reemplazadas por las que correspondan para el proyecto que se esté ejecutando
De esta manera, el usuario perspicaz, incluirá esta entrada en el instancia.ini y el proyecto funcionará. Otra opción es agregar una sección en los manuales de instalación de la aplicación donde se especifique la inclusión de esta clave en el archivo.