The online documentation is produced by a web publishing technology created by us to read the documents origins in OpenOffice Writer (ODT) and Microsoft Word (docx) formats and produces native web and PDF versions. In this way we maintain Louder project documentation update and in sync on each of its formats.
El componente Core actúa como integrador y orquestador de todas las operaciones ejecutadas en el Framework, además proporciona información sobre el entorno de ejecución a múltiples componentes.
Jerarquía de Clases
Clase Object
La mayor parte de las clases en Kumbia Enterprise Framework poseen una clase superior llamada Object. Esta clase implementa el patrón Layer Supertype el cual permite implementar métodos que no puedan ser duplicados a lo largo de toda la implementación de componentes en el Framework. La clase Object se encuentra en Library/Kumbia/Object.php.
CoreConfig
Se encarga de leer los archivos de configuración de las aplicaciones e integrar las opciones definidas en ellos a los componentes del framework.
CoreLocale
Su objetivo es servir de puente entre los componentes de la aplicación y los componentes de localización e internacionalización. Cuando se genera una excepción este componente obtiene los mensajes localizados apropiados al desarrollador.
CoreClassPath
Mantiene un directorio de rutas a las clases del framework de tal forma que se pueda realizar la inyección de dependencia en la aplicación cuando sean requeridos.
CoreRemote
Ofrece información extendida sobre un entorno de ejecución remoto que permita determinar problemas localmente.
Servicios del Componente Core
Obtener el Instance Name
El nombre de la instancia se refiere al nombre lógico del grupo de aplicaciones instaladas en una misma distribución del framework. Adicional a lo anterior también se refiere al directorio donde se encuentra instalado el framework, este es importante es muchos aspectos.
Zona Horaria de las Aplicaciones
Kumbia Enterprise Framework permite establecer un parámetro de zona horaria general para todas las aplicaciones dentro de una misma instancia. Este parámetro se encuentra en la sección core del archivo config/config.ini.
Ejemplo: Establecer la zona horaria en el archivo config.ini
En el manual de PHP puede encontrar identificadores validos para la mayor parte de zonas horarias de la tierra.
En tiempo de ejecución puede cambiar la zona horaria usando el método estático Core::setTimeZone(string $timezone), si establece una zona invalida se generará una excepción CoreException.
Cambiar el Charset de la aplicación
Por defecto una aplicación en Kumbia Enterprise produce salidas usando codificación Unicode UTF-8. Para que toda la aplicación utilice un mismo charset se requiere que multiples aspectos estén sincronizados en este sentido.
Servidor Web: La salida del servidor web en el caso de Apache Web Server es establecida dinámicamente en el archivo public/.htaccess con la opción:
AddDefaultCharset UTF-8
La vista principal: La vista principal de la aplicación proporciona el meta Content-Type que debe ser establecida de la siguiente forma para definir el charset:
Archivos XML: La primera línea del encabezado de un archivo XML también debe ser cambiada para reflejar el cambio del charset.
<?xml version="1.0" encoding="UTF-8" ?>
Bases de datos: Los motores de base de datos como MySQL ó Oracle permiten establecer la codificación en que se almacenan y devuelven los datos en las tablas. Consulte la documentación del motor utilizado para aprender como modificar la codificación por defecto.
JavaScript: Los archivos javascript deben estar guardados con la codificación correcta sin embargo la etiqueta SCRIPT puede ser establecida de la siguiente forma para ayudar al navegador a determinar el charset correcto:
CSS: En los recursos CSS es posible usar establecer la codificación del archivo también para ayudar al navegador a un major reconocimiento de la misma así:
@charset "utf-8";
Cambiar la localización por defecto
Es posible cambiar la localización por defecto usando el método Locale::setDefault esto afectará todas las operaciones realizadas con los componentes de internacionalización como lo son Date, Traslate y Currency.
Ejemplo: Cambiar la localización por defecto programacionalmente
<?php Locale::setDefault("es_ES") ?>
Obtener la versión del Framework
La constante Core::FRAMEWORK_VERSION permite obtener la versión del framework utilizado. Puede utilizar este valor para separar la compatibilidad de sus aplicaciones cuando actualice el framework y se presenten inconvenientes.
Ejemplo: Comparar la compatibilidad de una aplicación usando Core::FRAMEWORK_VERSION
<?php
if(version_compare(Core::FRAMEWORK_VERSION, "1.0", ">=")){
//La versión del framework es mayor ó igual a la 1.0
}
Subcomponente CoreConfig
El subcomponente CoreConfig permite leer la configuración de las aplicaciones y convertirlas en valores nativos de PHP para su uso en procesos de la aplicación.
CoreConfig puede leer en forma sencilla archivos de configuración de la instancia, de la aplicación actualmente en ejecución y de otras aplicaciones.
API del subcomponente CoreConfig
static public void function setAdapter($adapterName) Permite establecer el tipo de adaptador del componente Config debe ser usado para leer los archivos de configuración de la aplicación. Este cambio debe ser hecho en el boostrap de la instancia y afectará a todas las aplicaciones en ella.
static public Config function read(string $path, string $adapter) Lee un archivo de configuración mediante su path. El path absoluto por defecto es el directorio raíz de la instancia del framework. El parámetro $adapter indica el tipo de adaptador del componente Config debe ser usado para leer el archivo.
static public Config function readAppConfig($applicationName="") Lee el archivo "config" (normalmente config.ini) de la aplicación activa devolviendo un objeto Config. Las secciones del archivo .ini son procesadas y devueltas como propiedades objetos del objeto. Si no se establece el parámetro $applicationName entonces se lee de la aplicación actual.
static public Config function readBootConfig() Lee el archivo boot.ini (normalmente boot.ini) de la aplicación activa devolviendo un objeto Config. Las secciones del archivo .ini son procesadas y devueltas como propiedades objetos del objeto.
static public Config function readEnviroment() Lee el archivo environment de la aplicación activa. Los valores del entorno actual pueden ser accedidos directamente en el objeto Config devuelto, los demás entornos se acceden mediante una propiedad del objeto.
public static Config function getConfigurationFrom(string $applicationName, string $file) Devuelve la configuración en un archivo ubicado en una aplicación especifica. Este archivo debe estar ubicado en el directorio config/ de la aplicación.
public static function readFromActiveApplication(string $file, string $adapter='') Lee un archivo ubicado el directorio config/ de la aplicación que está actualmente en ejecución. El parámetro $adapter indica el tipo de adaptador del componente Config debe ser usado para leer el archivo
Subcomponente CoreClassPath
Gran parte de los componentes y subcomponentes en Kumbia Enterprise son cargados mediante inyección de dependencia usando autoload. Gracias a esto se reduce considerablemente la lectura de disco obteniendo lo que se requiere en forma dinámica a medida que es solicitado por la aplicación.
El ClassPath es un directorio interno que almacena las ubicaciones de las clases y componentes para su posterior inyección cuando son requeridos. Por motivos de rendimiento no todos los componentes son inyectados sobre todo los que funcionan como integradores y los que atienden la petición.
En subcomponente CoreClassPath ofrece una interfaz de aplicación para la administración del directorio de clases permitiendo agregar, cambiar ó eliminar entradas facilitando la modificación del comportamiento del framework.
Reemplazar un componente del Framework
Es posible reemplazar un componente del framework cambiando la ruta del directorio de clases a la del nuevo componente. La única restricción es utilizar el mismo nombre de la nueva clase en el componente utilizado.
En el siguiente ejemplo se muestra como reemplazar el componente de localización de Kumbia Enterprise por uno de la aplicación. Notese que la extensión .php del archivo es omitida a propósito:
Ejemplo: Reemplazar la ruta de una clase a otra definida por el usuario
El path asignado no es comprobado por el framework por lo que debe cerciorarse que este exista y que el archivo contenga la clase solicitada.
API de CoreClassPath
static public function lookupClass(string $className) Permite consultar si una clase existe en el directorio de clases.
static public function getClassPath(string $className) Permite consultar la ruta existente en el framework para una determinada clase.
static public function addToPath(string $className, string $path) Agrega una nueva ruta al directorio de clases. Si esta ya existe no se reemplaza.
static public function replacePath(string $className, string $path) Reemplaza una entrada en el directorio de clases.
Subcomponente CoreType
El subcomponente CoreType permite realizar aserciones sobre los parámetros recibidos en diferentes componentes del framework asegurando que se recibe el tipo de dato adecuado. El trabajo de este subcomponente es fundamental para asegurar en gran medida procesos más confiables y seguros. Cuando las aserciones fallan se lanza una excepción tipo CoreTypeException.
API de CoreType
static function void assertNumeric(int $var) Realiza una aserción sobre un valor numérico
static function void assertBool(bool $var) Realiza una aserción sobre un valor booleano
static function void assertString(string $str) Realiza una aserción sobre un valor de cadena de caracteres.
static function void assertArray(array $var) Realiza una aserción sobre un valor array.
static function void assertResource(resource $var) Realiza una aserción sobre una variable de recurso.
static function void assertObject(object $var) Realiza una aserción sobre un objeto.
Crear Plugins de Aplicación
La arquitectura de plugins de Aplicaciones permite observar, extender y manipular el comportamiento de la aplicación según como las condiciones lo exijan.
Los plugins permiten interceptar eventos de la aplicación de tal forma que estos sean observables y además ejecutárse uno tras otro de manera centralizada sin requerir refactorización ó reintegración en la aplicación.
Crear un Plugin de Aplicación
Los plugins son clases que implementan eventos generales que son invocados a medida que el flujo de vida de una aplicación avanza en una sesión de usuario. Estas clases deben cumplir con los siguientes requerimientos:
Deben estar ubicados en el directorio de plugins usualmente apps/app-name/plugins ó donde la variable pluginsDir indique.
El nombre del archivo que implementa la clase debe ser el nombre del plugin
El nombre de la clase debe tener la extensión Plugin
Los plugins de controlador deben heredar de la clase ApplicationPlugin ó ser subclase de ella
Las clases pueden implementar métodos públicos que referencian los eventos ocurridos en los controladores, la lista de ellos es la siguiente:
Tabla: Eventos que se pueden implementar en plugins de Aplicación
Nombre Evento
Descripción
beforeStartApplication
Ocurre en la primera petición a la aplicación antes de invocarse el método de ControllerBase onStartApplication
afterStartApplication
Ocurre en la primera petición a la aplicación después de invocarse el método de ControllerBase onStartApplication
beforeChangeInstance
Ocurre cuando en una misma sesión de usuario se cambia a otra instancia del framework en el mismo servidor de aplicaciones.
afterChangeInstance
Ocurre después de ejecutarse el método de ControllerBase llamado onChangeInstance.
beforeStartRequest
Ocurre antes de iniciar empezar a atender una petición realizada a la aplicación.
beforeFinishRequest
Ocurre cuando se termina de atender la petición realizada a la aplicación.
beforeUncaughtException
Ocurre antes de lanzarse una excepción que no fue capturada por la aplicación.
onControllerException
Ocurre cuando se genera una excepción dentro del controlador. Se ejecuta antes de beforeUncaughException