PHPackages                             jossuer/handler - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. jossuer/handler

ActiveLibrary[Framework](/categories/framework)

jossuer/handler
===============

Core MVC de php para construir proyectos web

0158PHP

Since May 24Pushed 11mo ago1 watchersCompare

[ Source](https://github.com/JossueR/Handler)[ Packagist](https://packagist.org/packages/jossuer/handler)[ RSS](/packages/jossuer-handler/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Handler: Framework MVC para Desarrollo Rápido de Aplicaciones Web
=================================================================

[](#handler-framework-mvc-para-desarrollo-rápido-de-aplicaciones-web)

Handler es un framework MVC (Modelo-Vista-Controlador) desarrollado en PHP que tiene como objetivo facilitar y agilizar el proceso de creación de aplicaciones web. A través de diversas características y componentes, Handler proporciona herramientas para el acceso a bases de datos, gestión de permisos, generación de elementos visuales y manejo de controladores.

Es un microframework de PHP ligero pero potente. Está diseñado para ser fácil de aprender y usar, pero también ofrece una amplia gama de características para crear aplicaciones web robustas.

Requisitos Previos
------------------

[](#requisitos-previos)

- PHP con las siguientes extensiones habilitadas:
    - simplexml
    - fileinfo
    - mysqli
    - curl
- Composer para la gestión de dependencias

Instalación
-----------

[](#instalación)

El framework se puede instalar fácilmente a través de Composer, un administrador de dependencias de PHP:

```
composer require jossuer/handler

```

Características Principales
---------------------------

[](#características-principales)

1. **Capa de Acceso y Manipulación de la Base de Datos:** Handler incluye una capa que simplifica la interacción con la base de datos. Esto permite a los desarrolladores realizar operaciones como consultas, inserciones, actualizaciones y eliminaciones de datos de manera más eficiente y estructurada.
2. **Esquema de Permisos, Usuarios y Roles:** El framework incluye un sistema de gestión de permisos y roles que puede ser activado o desactivado a través de la configuración en la base de datos. Esto proporciona un control granular sobre quién puede acceder a qué recursos dentro de la aplicación.
3. **Mapeo Sencillo de Controladores y Métodos:** Handler ofrece una forma simple de mapear controladores a métodos de clase. Esto permite organizar el código de manera más comprensible y facilita el mantenimiento a medida que la aplicación crece.
4. **Generación de Elementos Visuales:** Handler simplifica la creación de elementos visuales en HTML, CSS y JavaScript. Los bloques de visualización incluyen generadores de formularios, botones, tablas, reportes y contenedores que pueden albergar otros bloques. Esto acelera el proceso de diseño y maquetación de la interfaz de usuario.
5. **Capa de Controladores:** Handler ofrece una capa de controladores que pueden ser utilizados para crear tanto APIs como sistemas web. Los controladores pueden ser seguros o no seguros, dependiendo de si requieren autorización. Esto proporciona flexibilidad en la creación de diferentes tipos de aplicaciones.
6. **Sistema de Reportes Avanzado:** El componente ReporterMaker permite generar informes complejos basados en consultas SQL y filtros personalizables, con soporte para parámetros dinámicos y subinformes.
7. **Gestión Avanzada de Consultas:** El sistema incluye QueryParams para la gestión de paginación, ordenamiento y filtrado de consultas de base de datos, con soporte para diferentes modos de paginación y verificación de filtros.
8. **Formularios Dinámicos:** FormMaker permite crear formularios HTML dinámicos con diversos tipos de campos, validación y procesamiento AJAX.

---

Estructura de carpetas recomendada para Handler
-----------------------------------------------

[](#estructura-de-carpetas-recomendada-para-handler)

Para usar el framework, se recomienda seguir la siguiente estructura de carpetas:

```
src
├── private
│   ├── config.php
│   ├── controllers
│   │   └── HomeController.php
│   ├── models
│   │   └── UserModel.php
│   └── views
│       └── home.php
└── public
    ├── .htaccess
    └── index.php
.env

```

**Explicación**

- La carpeta `src` contiene todos los archivos fuente del proyecto, incluyendo los controladores, modelos, lógica y configuraciones.
- La carpeta `private` contiene todos los archivos sensibles, como los controladores, modelos y la configuración. Esta carpeta debe estar protegida con un archivo `.htaccess` que deniegue el acceso a todos los usuarios.
- La carpeta `public` contiene todos los archivos públicos, como las vistas y el archivo `index.php`. Esta carpeta debe estar configurada como el documento raíz del servidor web.
- El archivo `.env` en la raíz del proyecto contiene las variables de entorno, como las credenciales de la base de datos.

**Detalles**

- El archivo `config.php` contiene la configuración del framework, incluyendo las conexiones a la base de datos y otras opciones.
- Los controladores son los encargados de procesar las peticiones del usuario.
- Los modelos proporcionan acceso a los datos de la base de datos.
- Las vistas son responsables de mostrar los datos al usuario.
- El archivo `index.php` es el punto de entrada del framework.

Estructura del Proyecto
-----------------------

[](#estructura-del-proyecto)

- `src/HandlerCore`: Contiene el código principal del proyecto
    - `components`: Componentes principales como ReporterMaker, FormMaker, Handler
    - `models`: Modelos de datos y clases DAO
    - `services`: Servicios del sistema
    - `views`: Vistas y plantillas
- `tests`: Contiene las pruebas unitarias
- `vendor`: Dependencias gestionadas por Composer

---

Configuración de Handler
------------------------

[](#configuración-de-handler)

El framework Handler utiliza dos métodos principales para la configuración:

1. **Archivo `config.php`**: Contiene la configuración general del framework
2. **Archivo `.env`**: Contiene variables de entorno sensibles como credenciales de base de datos

### Configuración con Environment

[](#configuración-con-environment)

El archivo `config.php` utiliza la clase `Environment` para almacenar las variables de configuración. Esta clase tiene las siguientes propiedades principales:

- `APP_DATE_FORMAT`: Formato de fecha de la aplicación.
- `DB_DATE_FORMAT`: Formato de fecha de la base de datos.
- `PATH_PRIVATE`: Ruta a la carpeta privada.
- `APP_ENABLE_BD_FUNCTION`: Indica si se debe utilizar la función de secuenciales de la base de datos.
- `APP_CONTENT_BODY`: Contenedor del contenido principal de la aplicación.
- `APP_DEFAULT_LIMIT_PER_PAGE`: Límite predeterminado de registros por página.
- `PATH_ROOT`: Ruta raíz de la aplicación.
- `APP_LANG`: Idioma predeterminado de la aplicación.
- `PATH_HANDLERS`: Ruta a los controladores.
- `APP_CONTENT_TITLE`: Elemento para mostrar el título del contenido.
- `APP_HIDDEN_CONTENT`: Contenido oculto.
- `NAMESPACE_HANDLERS`: Espacio de nombres para los controladores.
- `NAMESPACE_MODELS`: Espacio de nombres para los modelos.
- `ACCESS_PERMISSION`: Permiso de acceso principal para el área privada.
- `CONFIG_VAR_REPORT_TAG`: Etiqueta de reportes para mapear las variables de configuración.
- `DB_DISPLAY_DATE_FORMAT`: Formato de fecha para visualización de la base de datos.
- `ACCESS_HANDLER`: Controlador de acceso.
- `START_HANDLER`: Controlador de inicio.
- `PATH_UPLOAD`: Ruta para la carga de archivos.

**Ejemplo de configuración en config.php:**

```
Environment::$APP_CONTENT_TITLE = "Mi aplicación";
Environment::$APP_CONTENT_BODY = "Este es el contenido principal de mi aplicación";
Environment::$APP_HIDDEN_CONTENT = "Este contenido no se mostrará al usuario";
Environment::$APP_DATE_FORMAT = "d/m/Y";
Environment::$DB_DATE_FORMAT = "Y-m-d";
Environment::$PATH_PRIVATE = "/private";
Environment::$PATH_ROOT = "/public";
Environment::$PATH_UPLOAD = "/uploads";
Environment::$APP_DEFAULT_LIMIT_PER_PAGE = 10;
Environment::$NAMESPACE_HANDLERS = "\\App\\components\\handlers\\";
Environment::$NAMESPACE_MODELS = "\\App\\models\\dao\\";
```

### Configuración con Variables de Entorno (.env)

[](#configuración-con-variables-de-entorno-env)

Handler utiliza la biblioteca phpdotenv para cargar variables de entorno desde un archivo `.env`. Este enfoque es especialmente útil para almacenar información sensible como credenciales de base de datos.

**Ejemplo de archivo .env:**

```
DB_HOST=localhost
DB_DATABASE=nombre_base_datos
DB_USERNAME=usuario
DB_PASSWORD=contraseña

```

Para cargar estas variables en su aplicación, Handler inicializa phpdotenv automáticamente, pero también puede hacerlo manualmente:

```
$dotenv = \Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
```

### Otras Configuraciones

[](#otras-configuraciones)

Además de las propiedades mencionadas anteriormente, el archivo `config.php` también puede contener otros valores de configuración que pueden ser personalizados:

- `APP_ENABLE_SESSION`: Indica si se deben utilizar sesiones.
- `APP_SESSION_NAME`: El nombre de la sesión.
- `APP_SESSION_LIFETIME`: La duración de la sesión en segundos.
- `APP_SESSION_PATH`: La ruta donde se almacenarán las sesiones.
- `APP_SESSION_DOMAIN`: El dominio donde se almacenarán las sesiones.
- `APP_SESSION_SECURE`: Indica si las sesiones deben ser seguras.
- `APP_SESSION_HTTPONLY`: Indica si las sesiones deben ser solo HTTP.
- `APP_DEBUG`: Indica si se debe habilitar el modo de depuración.
- `APP_ENV`: El entorno de ejecución de la aplicación.

---

Componentes Avanzados
---------------------

[](#componentes-avanzados)

### QueryParams: Gestión Avanzada de Consultas

[](#queryparams-gestión-avanzada-de-consultas)

La clase `QueryParams` proporciona una forma estructurada de gestionar parámetros de consulta como paginación, ordenamiento y filtrado para consultas de base de datos.

#### Características Principales

[](#características-principales-1)

- **Paginación**: Permite configurar el tamaño de página y el número de página actual.
- **Ordenamiento**: Permite ordenar los resultados por múltiples campos en orden ascendente o descendente.
- **Filtrado**: Permite aplicar filtros a las consultas basados en columnas específicas.
- **Modos de Paginación**: Soporta diferentes modos de paginación como SQL\_CALC\_FOUND\_ROWS.
- **Carga desde Peticiones HTTP**: Puede cargar automáticamente parámetros desde peticiones HTTP.

#### Ejemplo de Uso

[](#ejemplo-de-uso)

```
// Crear una instancia de QueryParams
$queryParams = new QueryParams();

// Configurar paginación (10 elementos por página, página 1)
$queryParams->setEnablePaging(10, 1);

// Agregar campos de ordenamiento
$queryParams->addOrderField("created_at", false); // DESC
$queryParams->addOrderField("name", true); // ASC

// Configurar filtros
$queryParams->setFilterString("John");
$queryParams->setFilterColumns(["name", "email"]);

// Ejecutar consulta con los parámetros
$queryInfo = SimpleDAO::execQuery($query, true, true, null, $queryParams);
```

#### Carga desde Peticiones HTTP

[](#carga-desde-peticiones-http)

QueryParams puede cargar automáticamente parámetros desde peticiones HTTP:

```
// Crear y cargar parámetros desde la petición actual
$queryParams = QueryParams::buildRequestQueryParams();

// Ejecutar consulta con los parámetros
$queryInfo = SimpleDAO::execQuery($query, true, true, null, $queryParams);
```

### ReporterMaker: Sistema de Reportes Avanzado

[](#reportermaker-sistema-de-reportes-avanzado)

El componente `ReporterMaker` permite generar informes complejos basados en consultas SQL y filtros personalizables.

#### Características Principales

[](#características-principales-2)

- **Informes Basados en ID**: Los informes se identifican con códigos (ej. R0010, R0021).
- **Filtros Personalizables**: Permite definir filtros para los informes.
- **Parámetros Dinámicos**: Soporta parámetros que pueden ser proporcionados en tiempo de ejecución.
- **Subinformes**: Permite incluir subinformes dentro de informes principales.
- **Generación de SQL**: Genera consultas SQL basadas en la configuración del informe.
- **Integración con FormMaker**: Permite crear formularios de filtro para los informes.

#### Ejemplo de Uso

[](#ejemplo-de-uso-1)

```
// Crear una instancia de ReporterMaker con el ID del informe
$reporter = new ReporterMaker("R0010");

// Establecer parámetros para el informe
$reporter->setDataArray([
    "params" => [
        "startDate" => "2023-01-01",
        "endDate" => "2023-12-31",
    ],
    "status" => "ACTIVE"
]);

// Obtener el DAO para ejecutar la consulta
$dao = $reporter->getDAO(true);

// Crear un formulario de filtro para el informe
$form = new FormMaker();
$form = $reporter->getFormFilter($form, []);
$form->show();
```

---

Archivo index.php
=================

[](#archivo-indexphp)

El archivo `index.php` es el punto de entrada del framework Handlers. Este archivo se encarga de cargar la configuración, crear una instancia del `Handler` y ejecutarlo.

**Requisitos**

El archivo `index.php` requiere el siguiente archivo:

- `vendor/autoload.php`: Este archivo es el cargador de autocarga de Composer. Se utiliza para cargar las clases del framework Handlers.

**Código**

El siguiente es el código del archivo `index.php`:

PHP

```
