Estructura
Osumi Framework se compone principalmente de 3 carpetas:
app
: carpeta del usuario. El código creado por el usuario para crear su aplicación va en las subcarpetas que hay dentro deapp
ofw
: carpeta del framework. En esta carpeta están los archivos y carpetas que componen el Frameworkweb
: carpeta pública. ElDocumentRoot
debe apuntar a esta carpeta y los archivosindex.php
y.htaccess
que hay en su interior son los encargados de recibir todas las peticiones y llamar a las funciones apropiadas.
Carpetas que componen el framework
La carpeta app
contiene el código de cada aplicación creada por el usuario.
app/component
: Carpeta para los componentes. Los componentes son pequeñas piezas de código reutilizable, por ejemplo elementos de un listado. Aceptan código PHP.-
app/config
: Carpeta con los archivos de configuración. En esta carpeta hay 2 archivos:config.json
: Archivo con la configuración global. Ver Configuración.translations.json
: Archivo con las traducciones para un sitio multi-idioma. Ver Traducciones.
app/dto
: Carpeta para los archivos DTO (Data Transfer Object), clases para mapear los datos recibidos en una solicitud. Cada DTO va en un archivo separado, aunque se pueden reutilizar en diferentes acciones. Ver DTOsapp/filter
: Carpeta para los filtros que se ejecutan ANTES de las acciones de los módulos. Cada filtro va en un archivo separado. Ver Filtros.app/layout
: Carpeta para las plantillas globales, puede haber tantas como se quiera, pero si no se configuran plantillas globales personalizadas es obligatorio que haya una llamadadefault.layout.php
.app/model
: Carpeta para las clases que componen el modelo. Tiene que haber un archivo por cada clase y cada clase representa una tabla de la base de datos. También puede haber clases personalizadas. Ver Modelo.app/module
: Carpeta para los módulos que contienen la lógica de la aplicación. Ver Módulos.app/service
: Carpeta para los servicios, clases auxiliares con funciones que se pueden reutilizar a lo largo de toda la aplicación. Ver Servicios.app/task
: Carpeta para las tareas que se pueden ejecutar desde línea de comandos mediante el ejecutableofw
. Ver Tareas.
La carpeta logs
contiene los logs generados por el sistema interno de logs OLog
.
La carpeta ofw
contiene el código interno del framework.
ofw/cache
: Carpeta con objetos cacheados. Osumi Framework proporciona un sistema de cache con el que almacenar objetos JSON complejos. Por ejemplo, el propio Framework crea un archivo llamadourls.cache.json
en el que se guarda un listado resumiendo de las URLs que componen la aplicación para un acceso más rápido.-
ofw/export
: Carpeta para los archivos generados por el Framework, como el archivo SQL del modelo o las copias de seguridad (ver Tareas).
- La tarea
generateModel
crea un archivo SQL con el que generar toda la base de datos. - La tarea
extractor
crea un archivo con una copia de seguridad de toda la aplicación.
- La tarea
ofw/lib
: Carpeta para las librerías de terceros.ofw/locale
: Carpeta para las traducciones de los mensajes del CLI.ofw/plugins
: Carpeta para los plugins que se usarán en la aplicación. Ver Plugins.ofw/task
: Carpeta para las tareas que proporciona el propio framework. Ver Tareas.ofw/template
: Carpeta para las plantillas usadas por las tareas internas del framework.ofw/tmp
: Carpeta para datos temporales. Por ejemplo en esta carpeta se generan archivos temporales usados en el procesamiento de imágenes.ofw/vendor
: Carpeta para las utilidades y clases internas del framework.
La carpeta web
es la parte pública, donde van situados los archivos estáticos expuestos a Internet.
web/css
: Carpeta para los archivos CSS definidos en el archivo de configuración.web/js
: Carpeta para los archivos JavaScript definidos en el archivo de configuración.
Ciclo de ejecución
En Osumi Framework, este es el ciclo de ejecución de cada solicitud:
- Una URL es llamada, por ejemplo
/user/igorosabel
- Se busca en las URLs de cada módulo dicha URL. En caso de no encontrarse, se devuelve un error 404 (se puede configurar donde hay que redirigir al usuario en este caso).
-
Para este ejemplo, en el módulo
home
(/app/module/home/
) hay unaacción
llamadauser
(/app/module/home/actions/user/
):
#[OModuleAction( url: '/user/:id', services: ['user', 'photo'] )] class userAction extends OAction { ... }
- En este caso la URL coincide en
/user/
eigorosabel
sería interpretado como un valor dinámico que se pasaría comoid
. - Al coincidir esta URL, se ejecutaría el módulo
home
y la acciónuser
- Antes de ejecutar la acción correspondiente, se pueden definir
filtros
que hacen una función previa, por ejemplo comprobar si un usuario tiene permiso para acceder a un apartado concreto. - En este caso, se ejecutará la función
run
de la claseuserAction
del archivoapp/module/home/actions/user/user.action.php
- Tras ejecutarse el código de la función, se carga la plantilla.
- La plantilla se compone del
layout
o cuerpo principal y la plantilla asociada a cada acción. Las plantillas están en la propia carpeta de la acción, en este casoapp/module/home/actions/user/user.action.html
. - En las plantillas se pueden definir "huecos" que se substituirán con valores de la función acción.
- Finalmente, se pueden utilizar archivos CSS, JS o imágenes, situados en la carpeta
web
.