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.
Una aplicación web es una extensión dinámica de un sitio web ó un servidor de aplicaciones. Existes 2 tipos de aplicaciones web:
Orientadas a la Presentación: Son aplicaciones que generan páginas web dinámicas usando diferentes lenguajes de marcas (HTML, XML, etc) y tecnologías como (CSS, JavaScript, etc) generando contenidos de respuesta de acuerdo a las peticiones recibidas.
Orientadas a Servicios: Implementan endpoints para servicios web. Aplicaciones orientadas a la presentación suelen ser clientes de las orientadas a servicios.
Kumbia Enterprise Framework (KEF) proporciona un completo y robusto entorno para el desarrollo, testeo, implementación y puesta en producción de ambos tipos de aplicaciones web usando tecnología PHP.
Instancias del framework
Una instancia del framework hace referencia a una distribución del framework que reside en un servidor web. Las instancias pueden contener una ó más aplicaciones compartiendo una misma versión del framework y un mismo directorio público.
Las instancias pueden verse también como application containers manteniendo la memoria y recursos de las aplicaciones en forma separada pero proporcionando un entorno integrado de operación.
Estructura de directorios de una Instancia
La estructura de archivos de una instancia de Kumbia Enterprise Framework tiene lo siguiente:
La descripción de cada directorio es la siguiente:
Tabla: Descripción de directorios del framework
Directorio
Descripción
apps
El directorio apps contiene todas las aplicaciones que usen la misma versión del framework
default
Es la aplicación por defecto, el Front-Controller para esta aplicación permite acceder directamente a los controladores sin indicar el nombre de la aplicación.
controllers
Es el directorio en el que se deben ubicar todos controladores.
application.php
Contiene la clase ControllerBase de la cual heredan todos los controladores y en donde también definimos el método init
config
Contiene los archivos de configuración por aplicación y personalizada de aplicación
filters
Contiene filtros personalizados por usuario. Es opcional la presencia de este directorio.
library
Contiene componentes personalizados por aplicación. Es opcional la presencia de este directorio.
models
Aquí se deben ubicar todos los modelos de la aplicación, Kumbia Enterprise Framework permite organizar lógicamente en directorios los grupos de modelos.
views
Permite crear la presentación de aplicaciones mediante el componente View.
plugins
Es posible crear plugins que aumenten la funcionalidad de la implementación MVC.
validators
Permiten crear validadores para ActiveRecord que se ayuden a validar la lógica de datos.
config
Contiene la configuración general del framework
languages
Contiene los mensajes localizados del framework.
Library
Contiene al framework como tal y librerías de terceros
public
Hace el papel de DocumentRoot (raíz de documentos) de la aplicación, todo los archivos debajo de este directorio pueden ser accedidos públicamente. En sus subdirectorios se encuentra todo el contenido estático como imágenes, javascript, css y archivos descargables.
scripts
Contiene scripts que automatizan tareas en el framework y reducen la codificación manual.
test
Contienen test de unidad de los framework.
La estructura de directorios esta pensada buscando convención sobre configuración, así el desarrollo producido es más mantenible y se hace más eficiente el desarrollo cuando todo se encuentra en su lugar.
Publicar contenido estático
El directorio public en la estructura de archivos está destinado a publicar contenido estático que es visible públicamente. Cualquier archivo ubicado en este directorio ó en un subdirectorio puede ser accedido por los clientes de la aplicación.
Con el fin de establecer ubicaciones que hagan más mantenibles las aplicaciones se incluyen por defecto los siguientes subdirectorios:
Tabla: Directorios de publicación de contenido estático
Subdirectorio
Descripción
img
Contiene imágenes predefinidas del framework y su objetivo es colocar aquí imagenes a ser usadas por la aplicación.
css
Contiene archivos de estilos CSS. El archivo style.css contiene las definiciones de estilos estándares para todas las aplicaciones.
javascript
Está destinado a almacenar archivos JavaScript. El framework coloca en este directorio los frameworks y funciones básicas JavaScript.
temp
Directorio para archivos temporales.
files
Directorio para archivos a descargar.
El desarrollador debe tener en cuenta que cuando un contenido en estos directorios no existe la petición es direccionada a la aplicación. Evitar las peticiones a archivos inexistentes es una buena práctica en miras a mejorar el rendimiento de las aplicaciones.
Bootstrap
En cualquier estructura MVC el boostrap cumple el papel de tomar la URL reescrita e invocar tanto el Dispatcher como los enrutadores necesarios para ejecutar la petición. Para entender la forma en la que el Dispatcher busca el controlador en las aplicaciones y ejecuta la acción asociada es necesario comprender la forma en la que deben formar las URLs antes de generar una petición.
Para una estructura de directorios que incluye 2 aplicaciones, la primera default y la segunda que se llama producción que ilustramos así:
Ejemplo: Estructura de directorios para múltiples aplicaciones
En donde, el dominio del servidor es www.ejemplo.com, la ruta al framework es empresa (en este directorio del DocumentRoot esta el framework), el nombre del controlador es clientes, la acción en la tercera URL sería consultar y el parámetro para esta acción es el número 18.
Una petición para la aplicación de producción se coloca el nombre de esta después del directorio donde esta Kumbia Enterprise Framework, así:
Ejemplo: Acceder a la aplicación de producción desde una URL
Cada aplicación dentro de apps contiene una estructura de directorios para controladores, modelos y vistas única, la forma de acceder a cada aplicación es indicando su nombre antes del nombre del controlador.
Crear la acción por defecto en una Aplicación
La clase ControllerBase ubicada en apps/default/controllers/application.php permite definir el método init que se ejecuta en caso que no se defina un controlador ó acción por defecto:
Ejemplo: Acción por defecto en una aplicación
<?php
class ControllerBase {
public function init(){
//Cargar algunas extensiones
Extensions::loadExtension("Kumbia.ApplicationMonitor");
Extensions::loadExtension("Kumbia.Acl");
//Enrutar al controlador login
Router::routeTo("controller: login");
}
}
Crear un procedimiento de inicialización de la aplicación
El método ControllerBase::init es ejecutado si no se especifica un controlador en la URL, en ciertas ocasiones puede que no sea útil si se requiere inicializar extensiones ó ejecutar algún proceso de inicialización. El método ControllerBase::onStartApplication resulta más apropiado, en estos casos. Este método solo ejecuta un procedimiento en cuanto se realiza la primera petición a la aplicación. El siguiente ejemplo ilustra mejor el funcionamiento de este método:
Ejemplo: Definir un procedimiento de inicialización de la aplicación
<?php
class ControllerBase {
public function onStartApplication(){
//Cargar algunas extensiones
Extensions::loadExtension("Kumbia.Feed");
Extensions::loadExtension("Kumbia.Acl");
}
public function init(){
//Enrutar al controlador login
Router::routeTo("controller: login");
}
}
También se debe evitar realizar cualquier tipo de salida al explorador ya que este método es ejecutado antes de inicializarse el contexto de sesión.
Detectar un cambio en la ejecución de una instancia a otra
En la clase ControllerBase también es posible implementar el método onChangeInstanceEvent que es ejecutado cuando se detecta que en la misma sesión se ha ejecutado ya una aplicación en otra instancia de Kumbia Enterprise Framework.
Ejemplo: Detectar el cambio de ejecución de una instancia a otra
<?php
class ControllerBase {
public function onChangeInstanceEvent(){
//Se ha cambiado la instancia
}
}
Es posible que este evento no se llame correctamente si las aplicaciones e instancias tienen adaptadores de sesión diferentes.