El problema es que tengo una aplicación con el diseño Singlenton que funciona mas o menos de la siguiente manera:
Index.php : este Archivo recibe siempre los REQUEST HTTP, POST y GET, Intancia al archivo Main.php eh Instancia a la Funcion Main.
Main.php : este Archivo es el Segundo en ejecutarce luego del Index quie lo llama, este Archivo se encarga de:
1. Hacer require a un archivo config.conpro.php que Carga Constantes de la Aplicación estas Constantes deben poder usarse desde cualquier lugar del codigo luego de que se instancia este archivo.
2. Hacer require a los archivos que Manejaran las Clases de MVC
3. Hacer require a los archivos que Manejaran las Clases de Modulos de la Aplicacion
4. Ejecutar la Funcion Main en donde Se Cita:
A. El Manejador de Sesion
B. El Manejador de REQUEST-HTTP
C. El Manejador de Usuario
D. El Manejador de Contenido
E. El Manejador de Salida de Dato
F. El Manejador de variable
Explico ahora con ejemplos y códigos:
pensando en implementar el spl_autoload_register que es más flexible que el __autoload.
Pero necesito un poco de guía (Ejemplos basados en lo que expongo) ya que no sé si puedo hacer lo que actualmente hago de acuerdo a esta estructura.
Esta estructura se basa en el modelo Singleton con llamadas de archivos individuales para gestionar y organizar la estructura de la aplicación.
Archivos Index.php: Este archivo que utilizo para inicializar algunos parámetros php personalizados y es también el archivo de referencia en todo momento como un archivo utilizado para las solicitudes http. En este archivo también hago la inclusión a la Biblioteca Main.php y también instanciar como una clase y luego llamar a la clase y la funcion:
Ejemplo:
Código PHP :
<?php
ini_set('zlib.output_compression', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_httponly', 1);
require_once("control/class.Main.php");
date_default_timezone_set(ZONA);
$WebAPP = new Class_MAIN();
$WebAPP -> Main();
?>Archivos Main.php: en este archivo es el controlador típico y el gestor de acciones con el usuario, Actualmente necesito a los archivos de configuración y los gestores de archivos de otras clases, Como un segundo objetivo, el archivo Main.php es también el que gestiona el Estado de la sesión, administra las solicitudes GET y POST, gestiona la generación de contenido llamando al administrador. Cuando se devuelve por el gestor de contenido, llama al Administrador de vistas para imprimir la pantalla necesaria y finalmente llamar al Administrador de datos para borrar todas las variables utilizadas excepto las de sesión.
Ejemplo:
Código PHP :
<?php
class Class_MAIN{
public function __construct(){
require_once ('control/config/config.security.php'); #Require of Security Params
require_once ('control/config/config.conpro.php'); #Require of Constant to Use betwen all APP (DB Infos conecction, FTP Connection Etc)
require_once ('control/config/config.mail.php'); #Require of Constant to Send Mail (i think implement in conpro)
require_once ('control/config/config.model.php'); #Require that Call other Requires as Class Model Layer Generic (DB Manager, Date Manager, Error Manager, FTP Manager)
require_once ('control/config/config.viwer.php'); #Require that Call other Requires as Class Model viwer Generic (Form, List, Modals, Process, etc)
require_once ('control/config/config.classlibdep.php'); #Require that Call other Requires as Class APP MODULES as sub controlles (Departament Manager Process )
# Inicialisamos las clases que usaremos
$this->SESSIONMANAGER = new Class_SessionManager(); #Manager of Sesion Called from : config.model.php
$this->HTTPDATAMANAGER = new Class_HTTPDataManager(); #Manager of REQUEST-HTTP (GET, POST) Request.
$this->USERMANAGER = new Class_UserManager(); #Manager of User.
$this->CONTENTMANAGER = new Class_ContentManager(); #Content Manager.
$this->VARMANAGER = new Class_VarManager(); #Manager de Variables
}
public function __destruct(){
$this->SESSIONMANAGER = new Class_SessionManager(); #Manager of Sesion Called from : config.model.php
$this->HTTPDATAMANAGER = new Class_HTTPDataManager(); #Manager of REQUEST-HTTP (GET, POST) Request.
$this->USERMANAGER = new Class_UserManager(); #Manager of User.
$this->CONTENTMANAGER = new Class_ContentManager(); #Content Manager.
$this->VARMANAGER = new Class_VarManager(); #Manager de Variables
}
public function Main(){
$this -> SESSIONMANAGER -> Ses_Create(); #Check and Create Sesion Web and Cookies
$DTACheck = $this -> HTTPDATAMANAGER -> Check_POSTGET(); #Manager Request if exists
$USERLoged = $this -> USERMANAGER -> Check_USERLogin(); #Check User is Logged
$this -> CONTENTMANAGER -> Gen_Display($USERLoged, $DTACheck); #Call to Manager Content to retrive the data According to the request of the user
$this -> VARMANAGER -> ClearVars(); #Cleaner Vars
}
}
?>Después de hacer esto, cada archivo de config.model.php y config.viewer.php comienza a estar involucrado, Terminando cada vez más complejo con: config.classloader.php.
** Ejemplo: config.conpro.php (Constantes) **
Código PHP :
<?php
if (!defined('CONECTOR_DB')) define('CONECTOR_DB' ,'PDO');
if (!defined('DB_HOST')) define('DB_HOST' ,'localhost');
if (!defined('DB_USERNAME')) define('DB_USERNAME' ,'root');
if (!defined('DB_PASS')) define('DB_PASS' ,'');
if (!defined('DB_PRE')) define('DB_PRE' ,'TEST');
if (!defined('DB_N_SEC')) define('DB_N_SEC' ,'USER');
if (!defined('DB_PORT')) define('DB_PORT' ,'3306');
?>** Ejemplo: config.model.php (Biblioteca de clases) sí la aplicación incluye un archivo que incluye otros archivos como clase **
Código PHP :
<?php
$APP_DIR_EXT =$_SERVER['DOCUMENT_ROOT'] . '/control/classext/';
if (!defined('EXT_PASSWORD_CLASS')) define('EXT_PASSWORD_CLASS' ,'class.ext.password.php' ); #Add advanced encryption.
if (!defined('EXT_PHPMAILER_CLASS')) define('EXT_PHPMAILER_CLASS' ,'phpMailer/PHPMailerAutoload.php' ); #Add Mail Sistem to remplace defauld
$APP_DIR_CLASSGEN =$_SERVER['DOCUMENT_ROOT'] . '/control/classgeneric/';
if (!defined('SESSIONMANAGER_CLASS')) define('SESSIONMANAGER_CLASS' ,'class.managersession.php' ); #Clase Name Manager Sesion.
if (!defined('COOKIESMANAGER_CLASS')) define('COOKIESMANAGER_CLASS' ,'class.managercookies.php' ); #Clase Name Manager Cookies
if (!defined('VARMANAGER_CLASS')) define('VARMANAGER_CLASS' ,'class.managervar.php' ); #Clase Name Manager Variables
#Require
require_once $APP_DIR_EXT . EXT_PASSWORD_CLASS;
require_once $APP_DIR_EXT . EXT_PHPMAILER_CLASS;
require_once $APP_DIR_CLASSGEN . SESSIONMANAGER_CLASS;
require_once $APP_DIR_CLASSGEN . COOKIESMANAGER_CLASS;
require_once $APP_DIR_CLASSGEN . VARMANAGER_CLASS;
?>
** Ejemplo: config.viewer.php (Biblioteca de clases) sí la aplicación incluye un archivo que incluye otros archivos como clase **
Código PHP :
<?php
$APP_DIR_CLASSMVC =$_SERVER['DOCUMENT_ROOT'] . '/control/classMVC/';
if (!defined('CONTENTMANAGER_CLASS')) define('CONTENTMANAGER_CLASS' ,'class.managercontent.php' ); #Clase Name Manager Content and Permison.
if (!defined('MENUMANAGER_CLASS')) define('MENUMANAGER_CLASS' ,'class.managermenu.php' ); #Clase Name Manager Menu and Permison.
if (!defined('CRUDMANAGER_CLASS')) define('CRUDMANAGER_CLASS' ,'class.managerCRUD.php' ); #Clase Name Manager Crud and Permison.
#Require
require_once $APP_DIR_CLASSMVC . CONTENTMANAGER_CLASS;
require_once $APP_DIR_CLASSMVC . MENUMANAGER_CLASS;
require_once $APP_DIR_CLASSMVC . CRUDMANAGER_CLASS;
?>** Ejemplo: config.classlibdep.php (Biblioteca de Clases) sí y más hijos de hijos de hijos de Padre (Principal) **
Código PHP :
<?php
$APP_PHPCORE_DIR_DEPFORMS =$_SERVER['DOCUMENT_ROOT'] . '/control/core/forms';
$APP_PHPCORE_DIR_DEPPROCESS =$_SERVER['DOCUMENT_ROOT'] . '/control/core/process';
$APP_PHPCORE_DIR_DEPLIST =$_SERVER['DOCUMENT_ROOT'] . '/control/core/list';
$APP_PHPCORE_DIR_DEPMODALS =$_SERVER['DOCUMENT_ROOT'] . '/control/core/modal';
#Form area Files(every one is a Manager that Include Form html files According to the request of the user)
if (!defined('FORM_GEN')) define('FORM_GEN' ,'formgen.php'); # Form Generic
if (!defined('FORM_SIS')) define('FORM_SIS' ,'formsis.php'); # Form for Sistem Manager
#List area Files(every one is a Manager that Include PHP logic file to Used to generate specific lists according to each department According to the request of the user
if (!defined('LIST_GENERIC')) define('LIST_GENERIC' ,'listgeneric.php');
if (!defined('LIST_GEN')) define('LIST_GEN' ,'listgen.php');
#Modals html files
if (!defined('MODAL_GENERIC')) define('MODAL_GENERIC' ,'AMgeneric.php'); # Modals generic(Manual in Line )
if (!defined('MODAL_GEN')) define('MODAL_GEN' ,'AMgen.php'); # Modals gen(to Guideline this process generic)
#Process php Logic(depending on put CRUD button used this manager internal Process logic of php)
if (!defined('PROCESS_GEN')) define('PROCESS_GEN' ,'processgen.php'); # Procesos del Area de Genericos
if (!defined('PROCESS_SIS')) define('PROCESS_SIS' ,'processsis.php'); # Procesos del Area de Sistema
#Require
require_once $APP_PHPCORE_DIR_DEPFORMS . '/' . FORM_GEN;
require_once $APP_PHPCORE_DIR_DEPFORMS . '/' . FORM_SIS;
require_once $APP_PHPCORE_DIR_DEPLIST . '/' . LIST_GENERIC;
require_once $APP_PHPCORE_DIR_DEPLIST . '/' . LIST_GEN;
require_once $APP_PHPCORE_DIR_DEPMODALS . '/' . MODAL_GENERIC;
require_once $APP_PHPCORE_DIR_DEPMODALS . '/' . MODAL_GEN;
require_once $APP_PHPCORE_DIR_DEPPROCESS . '/' . PROCESS_GEN;
require_once $APP_PHPCORE_DIR_DEPPROCESS . '/' . PROCESS_SIS;
?>Después de que ya he citado todos los archivos y que están involucrados en la aplicación ahora viene la instanciación y la aplicación:
Código :
Class_MAIN
Has the function:
Main(){}
This calls for:
$ this -> CONTENTMANAGER -> Gen_Display()
This class has a structure that calls other classes:
function __construct() {
#We call the files that are required for page operation
$this -> MENUMANAGER = new Class_MenuManager ();
$this -> FORMMANAGER = new Class_FormManager ();
$this -> PROCESSMANAGER = new Class_ProcessManager ();
$this -> MODALSMANAGER = new Class_ModalManager ();
}Y así es con una estructura de jerarquía de acuerdo a las entradas.
Como se puede ver, utilizo el constructor para llamar a los archivos y clases que usaré en mi aplicación.
También verá la dependencia que existe entre las clases.
Mi pregunta es qué estructura debo seguir migrando a la implementación de spl_autoload_register, y si tienen o pueden ayudar con ejemplos.
