Skip to content

Latest commit

 

History

History
302 lines (254 loc) · 9.95 KB

File metadata and controls

302 lines (254 loc) · 9.95 KB

Modular

Modular (Skeleton para aplicaciones web PHP modulares basado en patrón MVC con Vite para auto refresco, y Tailwindcss para un diseño moderno)

Este framework está desarrollado sobre principios del patrón MVC, para un desarrollo eficiente y fácil, de aplicaciones modulares; la applicación framework contiene módulos base para tener un ejemplo de como trabajar él, clases para resolver consultas, constructor de consultas SQL, renderizado de vistas para tener una aplicación web modular, API Rest o servicio con poco programación de código.

Para usar esta aplicación, necesitas tener conocimientos básicos (o altos) de PHP, JavaScript o TypeScript, HTML, Programación Orientada a Objectos, configuración de servidores, flujo de trabajo Git, descargar este repositorio, instalar todas sus dependencias, configurar el servidor para siempre resolver hacia "public/index.php". ver configuración .htaccess para apache para tener una guía. Así mismo ésta aplicación tiene un archivo ".htaccess" dentro para hacerlo más fácil.

Para más información visita Bytes4Run.com.

Tabla de Contenido

Prerequisitos

  • PHP 8.1 o superior (8.1.7 recomendado)
  • MariaDB 8 o superior, o MySQL en su defecto
  • Tener instalado y activado los módulos, php_curl, pdo, mod_rewrite
  • Un Composer compatible con PHP 8 (para usar PHP 7 al instalar, actualice el archivo composer.json)
  • Node.js 18 o superior
  • Git

Obteniendo el Proyecto

Para obtener el proyecto, puede clonar o hacer fork de este repositorio, instalar las dependencias usando Composer y NPM (puede usar Yarn o bun sí así lo desea). Configure su servidor para resolver cualquier petición hacia "public/index.php"

NOTA: Agregar "AllowOverride All" para permitir la sobre escritura de su configuración del servidor.

Configurando el Proyecto

Asegurece de tener un archivo .env en su carpeta "configs/"; si no tiene uno, copie el archivo ".env.example" y renombrelo como ".env". Así mismo hacer con el archivo "config.json.example".

Agregue su configuración de database al archivo ".env", su configuración de aplicación and compañia al archivo "config.json" y todo está listo.

Tecnologías

Tema y diseño

Estructura de Datos y Directorios

Map

├── app
│ ├── core
│ │ ├── classes
│ │ ├── helpers
│ │ ├── libraries
│ │ ├── handlers
│ │ ├── entities
│ ├── modules
│ │ ├── _module_
│ │ │ ├── controllers
│ │ │ ├── models
│ │ │ ├── libraries
│ ├── App.php
├── public
│ ├── assets
│ │ ├── js
│ │ │ ├── custom
│ │ │ ├── global
│ │ ├── css
│ │ │ ├── custom
│ │ │ ├── global
│ │ ├── fonts
│ │ ├── img
│ │ ├── browserconfig.xml
│ │ ├── manifest.json
│ ├── uploads
│ ├── .htaccess
│ ├── index.html
│ ├── index.php
│ ├── robots.txt
├── resources
│ ├── views
│ │ ├── _engine_
│ │ │ ├── theme
│ │ │ │ ├── _module_
│ │ │ │ │ ├── templates
│ │ │ │ │ ├── layouts
├── cache
│ ├── smarty
│ ├── vite
├── configs
│ ├── .env.example
│ ├── config.json.example
├── tests
├── vendor
├── .env
├── .gitignore
├── composer.json
├── composer.lock
├── LICENCE
├── licence.txt
├── package.json
├── package-lock.json
├── postcss.config.js
├── README.md
├── tailwind.config.js
├── vite.config.ts

Petición al Servidor

URI: [/{module}/{controller}/{method}]

{
    "params": "array() | string | int"
}

Petición ejemplo:

POST: [/{module}/{controller}/{method}/{params}]

GET: [/{module}/{controller}/{method}/{params}]

URL: http://server/{module}/{controller}/{method}/{params} Los parámetros pueden ser cadenas de texto [{param1}/{param2}] "producto=algodon/date=12-16-05/date2=10-05-01" o [?{key=value}&{key=value}] "?producto=albondiga"

URL Format:

  • module/ (Cuando el controlador tiene el mismo nombre del módulo, esto resuelve: método "read" en un controlador con el mismo nombre del módulo)
  • module/method/ (Cuando se conoce el nombre del método, y el controlador tiene el mismo nombre que el módulo esto resuelve: un método en un controlador con el mismo nombre del módulo)
  • module/method?param1&param2 (Cuando se conocen los parámetros, el nombre del método y el controlador tiene el mismo nombre que el módulo, esto resuelve: parámetros para un método en un controlador con el mismo nombre del módulo)
  • module/controller/method/param1/param2 (Cuando se pasan todos los parámetros como una URI, esto resuelve: parámetros para un método en un controlador en un módulo)
  • module/controller/method?param1=value1&param2=value2(Cuando se pasan parámetros como una URL, esto resuelve: parámetros para método en un controlador en un módulo)

Respuesta del Servidor

La respuesta del servidor será una vista renderizada por el motor de plantillas configurado en el archivo .env (Smarty, twig, self) o una cadena en formato JSON para ser consumida por un framework frontend como vue, react, astro, etc.

La respuesta será siempre en este formato php ['view'=>"",'content'=[]]; para el consumo con motores, json {status:200,message:"ok",data:[]}; para el consumo frontend.

Tipos de Respuesta

Toda respuesta tiene un formato "header", "body","footer", esta puede ser un texto plano, un arreglo con información adicional, dependiendo de la respuesta del controlador.

Sí la respuesta es un mensaje, sú esquema será:

$response = [
    'head' => [
        'style' => [
            'title' => [
                'icon'  => "",
                'text'  => ""
                'color' => "",
            ]
        ],
        'text' => [
            'color' => "",
            'title' => ""
        ]
    ],
    'body' => [
        'breadcrumb' => [
            'main' => "",
            'routes' => [
                ['module' => "",
                'controller' => "",
                'method' => "",
                'params' => ""],
            ],
        ],
        'content' => [
                'mensaje' => "",
                'extra'   => "" | []
        ]
    ],
    'foot' => []
];

Sí sú mensaje es mostrado en una banda, el esquema será:

$response = [
    'head' => [
        'title' => [
            'color' => "",
            'icon'  => "",
            'text'  => ""
        ],
    ],
    'body'=>[
        'message' => [
            'type'   => "",
            'text'   => "", | []
            'extra'  => ""
            'header' => [
                'icon'  => "",
                'title' => "",
                'text'  => ""
            ],
        ]
    ],
    'foot'=>[]
];

Toda vista tiene la información general de la "layout" principal a ser usada, esto consiste en "head","css","js","icons", "navbar","sidebar","footer","app configs" si se desea usar una diferente, puede hacer su estructura dentro de un helper y llamarle antes de responder al creador de vistas.

Ejemplo de estructura de Datos para Vistas

$response = [
    'content' => [], // Donde el contenido será el cuerpo de la vista
    'layout' => [
        'head' => [
            'template' => "template_name.tpl",
            'data' => [
                ['meta_name' => "", 'meta_content' => ""],
            ],
            'css' => ['<link rel="stylesheet" type="text/css" href="\assets\css\style.css">']
        ],
        'body' => ['layout' => '', 'darkmode' => ''],
        'footer' => [
            'tempalate' => "template_name.tpl",
            'data' => []
        ],
        'navbar' => [
            'template' => "template_name.tpl",
            'data' => []
        ],
        'sidebar' => [
            'template' => "template_name.tpl",
            'data' => []
        ],
        'jslibs'=>['<script type="" src=""></script>',...]
        'scripts' => '<script></script>' // Un script para ser usado en el inicio del DOM
    ]
];

Créditos

FQA

Código Abierto y Contribución

Este "framework" o "skeleton" es de Código Abierto, licensiado bajo la licencia de uso libre de Bytes4Run basada en la licencia de uso de MIT (Massachusetts Institute Technology).

Sí desea contribuir, sientase libre de realizar una bifurcación al repositorio y enviar una petición de "pull". O puede dejar un comentario, inquietud o sugerencia para mejoras sobre este u otro proyecto de Bytes4Run, raise an issue; o escríbanos a projects@bytes4run.com