Estructura Base.


Esquema de la estructura de Agenor En la figura a la izquierda vemos la estructura basica de agenor, el cual consta de 3 archivos y unos cuantos directorios, comenzemos con una reseña de que contiene cada uno.

agenor : es el corazon del sistema, y contiene las clases que hacen posible la estructura MVC y algunas mas de apoyo.[No configurable]

configs : este directorio contendra todos los archivos de configuracion inicial del sistema, son archivos tipo ini pero con extencion php para mejorar la seguridad.[Configurable : 'DIR_CONFIG_APP']

layout : contendra directorios con temas de diseño del sitio, podremos contener tantos temas como querramos y cambiar el mismo en tiempo de ejecucion. Es un sistema multi-tema, multi-plantilla.[No configurable]

libs_external: directorio donde ubicamos librerias que no son de nuestra creacion pero las usamos en nuestro desarrollo.[Configurable : 'DIR_EXTERNAS']

log: se guardaran los archivos con los errores que se producen durante la ejecucion del sistema. Es configurable pero desde los archivos de configuracion de la apliacion.

modulos: Directorio fundamental para el desarrollador, aqui se incluira nuestro desarrollo principal.[Configurable : 'MODULOS']

plugins: podremos incluir clases que seran ejecutadas, antes o despues de ejectutar cualquier codigo perteneciente a un adaptador(controlador).[No configurable]

public: Carpeta para incluir contenido publico, como archivos de descarga publica, imagenes etc, este directorio puede no existir.[Configurable : Directorio de usuario]

usrlib: puede no existir y se usa generalmente para extender la libreria agenor como ser su adaptador, modelo etc, si bien se podria poner dicho codigo en libs_external, para diferenciar nuestro desarrollo del de terceros se aconseja el uso de este directorio.[Configurable : Directorio de usuario]

Luego nos encontramos con los archivos que se encargan del arranque y configuracion primaria del sistema. Estos son :
  • .htaccess
  • ConfigSystem.php
  • index.php
Estos archivos los analizaremos mas adelante.

  Estructura Directorio Modulos.

Esquema de la estructura de Agenor En el raiz del directorio encontramos un unico archivo BootstrapApplication.php y luego los directorios, cada uno de estos representa un modulo o una sub-aplicacion dentro del sistema.

BootstrapApplication.php: es una clase que se encarga de levantar los recursos que estaran disponibles para toda la aplicacion, esta puede no existir si no se necesita tener algun recurso disponible.

<?php
class BootstrapApplication extends \agenor\mva\BootstrapAbstract
{
    
/**
     * Sirve para Configurar la Vista que sera usada en el sitio.
     * Si se configura aqui el adaptador la toma como propia si no 
     * crea una nueva.
     * @return  View
     */
    
public function _startVista()
    {
        
$view           = new \agenor\mva\View();
        
$view->_nombre  = \agenor\mva\Registry::get('application')->sys->nombre;
        
$view->_version = \agenor\mva\Registry::get('application')->sys->version;
        
$view->_title   $view->_nombre;
        
$skin           = \agenor\mva\Registry::get('application')->layout->dir;
        
$view->setSkin($skin);
        
$view->setLayout(\agenor\mva\Registry::get('application')->layout->main); 
        
$view->setLanguage('es');

        return 
$view;
    }
    
    public function 
_startConfig()
    {
        
date_default_timezone_set(\agenor\mva\Registry::get('application')->sys->zone_date);
        
// Configuro el Inicio de session
        
\agenor\security\Session::start(URL_HTTP URL_BASE '/acceso');
    }
    
    public function 
_startPlugins()
    {
        
// Levanto el Plugin que me Permite Cargar el Menu.
        // Se va a ejecutar antes que el Metodo Init.
        
$this->getRouter()->setPlugins('Menu''PRE'0);
    }
};
?>
De esta clase se ejecutaran todos los metodos que comienzen con _start, en caso de que retornen algun objeto el mismo sera guardado en el Registry del sistema, el nombre para recuperarlo es el nombre del metodo menos el prefijo _start.
Adelantando, la recuperacion se realizaria con el siguiente codigo:
agenor\mva\Registry::get('Vista');

Si quisieramos los nombres de todas las vistas registradas:
\agenor\mva\Registry::getObjectsType('agenor\mva\View');

Si quisieramos la primer vista que encuentre el sistema:
\agenor\mva\Registry::getObjectsType('agenor\mva\View', true);

Contenido de modulos

Como dijimos anteriormente el nombre del mismo puede ser configurado, esto se realiza desde el archivo ConfigSystem.php con la constante 'MODULOS'.
Se pueden distinguir que estan instalados 4 modulos o sub-aplicaciones, las cuales pueden ser independientes totalmente unas de otras o pueden tener alguna relacion, los mismos son acceso, index, noticias, organigrama.

Analicemos el modulo acceso
Este modulo contiene los directorios adapters, configs, forms, models, views (css, js, phtml). No es necesario que esten todos ellos presentes, En el caso de que quisieramos simplemente que un modulo tenga solo paginas estaticas que mostrar, o sea la minima expresion de un modulo, requeriria la siguiente estructura:
  •  views
    •  phtml
      • index_index.phtml
      • index_estatica.phtml
donde index_index.phtml e index_estatica.phtml son archivos con el codigo HTML a mostrar.

  NOTA :
Como habran notado, los archivos de vistas son con extencion phtml, por lo cual tienen la capacidad de ejecutar codigo php, aunque solo se recomienda codigo para ayudar la presentacion y no otro. Esto es asi, porque se opto porque el propio motor de plantillas sea PHP.

adapters : se incluyen las clases adaptadoras, si fuera MVC puro serían las clases controladores o el directorio se llamaría controllers, no se dejó el post-fijo Controller para apegarnos más a MVA por lo demás es conocido que la funcionalidad que otorga es similar. En la disyuntiva estaba el ponerle en el nombre la terminación MController, para que resultara más familiar, dado por el nombre del patrón Mediating-Controling. Estas clases son las que tomaran la petición, le pedirán la información que necesiten al modelo y le daran a la vista la informacion a mostrar.
Se recomienda que aqui no se ponga codigo que tenga que ver con la logica del negocio, si no que es como un ditribuidor de tareas.
Este directorio es configurable a traves de la constante 'DIR_ADAPTERS', las clases adaptadoras deberan extender de \agenor\mva\Adapter.

configs : Se incluiran los archivos de configuracion especificos del modulo, no es necesario repetrir las configuraciones generales del directorio configs del raiz.
El nombre de la carpeta tambien es configurable mediante la constante 'DIR_CONFIGS'.-

forms : de este directorio se puede presindir totalmente, queda como ejemplo que pueden existir mas directorios aparte de los basicos de agenor.

models : son las clases que contienen la logica del negocio.
Es configurable su nombre por medio de la constante 'DIR_MODELS'.-

views : es el lugar donde se incluira todo lo que tiene que ver con la presentacion, como minimo debe incluir el directorio phtml, los directorios js y css pueden no existir, aunque al organizar en estos directorios los archivos js y css correspondientemente, el sistema nos dara beneficios a la hora de las rutas de inclusion de dichos tipos de archivos. No se tienen poque limitar a estos directorios solamente , podemos tener directorios de imagenes etc.
El nombre de este directorio tambien es configurable por medio de la constante 'DIR_VIEWS'.-