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.
- 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
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.
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.
├── 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.tsURI: [/{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¶m2 (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¶m2=value2(Cuando se pasan parámetros como una URL, esto resuelve: parámetros para método en un controlador en un módulo)
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.
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.
$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
]
];- Author: Jorge Echeverria.
- Contact: jecheverria@bytes4run.com
- Website: bystes4run
- Theme: Bytes4Run basado en tailwindcss y flowbite
- Version: 2.0.0 a.r1
- Short-version: 2.0
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