Introducción
NiBel Core es un micro-framework PHP modular y minimalista que implementa el patrón MVC. Está pensado para proyectos empresariales y SaaS que requieren control total del código sin sobrecarga de dependencias.
Instalación
# Clona el repositorio
git clone https://github.com/NiBelSGC/NiBelCore.git
cd NiBelCore
composer install
npm install (opcional)
cp app/config/.env.example app/config/.env
# Levanta servidor local (ejemplo)
php -S localhost:8000 -t public
Si usas XAMPP/Laragon coloca la carpeta public/ como document root.
Estructura del proyecto
NiBelCore/
├── app/
│ ├── api/
│ ├── config/
│ ├── controllers/
│ ├── models/
│ └── views/
├── public/
│ └── build/
├── src/
│ ├── scss/
│ ├── js/
│ └── img/
├── vendor/
├── gulpfile.js
├── Router.php
└── README.md
La estructura está pensada para mantener separación clara entre capas y facilitar despliegues en producción.
Requisitos
- PHP 8.1+
- MySQL 5.7 / MariaDB 10.4+
- Composer
- Node.js + npm (para tareas de Gulp y assets)
Bootstrap del sistema
El archivo app/config/bootstrap.php se ejecuta al inicio. Sus responsabilidades:
- Cargar composer's autoload
- Cargar variables de entorno (.env)
- Establecer conexión a BD (MySQLi)
- Asignar conexión a la clase base
Master
Ejemplo (simplificado)
// Autoload
require_once __DIR__ . '/../../vendor/autoload.php';
// Cargar .env usando vlucas/phpdotenv
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
// Conexión a DB (MySQLi)
$mysqli = new mysqli($_ENV['DB_HOST'], $_ENV['DB_USER'], $_ENV['DB_PASS'], $_ENV['DB_NAME']);
if ($mysqli->connect_errno) {
die('DB connection failed: '. $mysqli->connect_error);
}
// Asignar a Master
Model\Master::setConnection($mysqli);
Variables de entorno (.env)
El archivo app/config/.env contiene credenciales y configuraciones sensibles (no versionar).
# .env.example
DB_HOST=localhost
DB_USER=root
DB_PASS=
DB_NAME=nibel_db
EMAIL_HOST=smtp.example.com
EMAIL_PORT=587
EMAIL_USER=user
EMAIL_PASS=secret
Autoloading (PSR-4)
NiBel Core usa PSR-4 mediante Composer. Define tus namespaces en composer.json y usa namespace en clases. Esto facilita la carga automática de controladores, modelos y helpers.
Enrutamiento
El router central (Router.php) permite declarar rutas limpias:
$router->get('/inicio', [InicioController::class, 'index']);
$router->post('/login', [AuthController::class, 'login']);
El router ejecuta el controlador y renderiza la vista dentro del layout base (layout.php), inyectando la variable $contenido.
MVC
Controladores
Los controladores se encuentran en app/controllers/. Un controlador típico:
namespace Controller;
class InicioController {
public function index() {
$data = ['titulo' => 'Bienvenido'];
echo view('inicio', $data);
}
}
Modelos
Los modelos heredan de Model\Master y contienen lógica de acceso a datos.
Vistas
Las vistas van en app/views/. El layout principal es layout.php y cada vista se inyecta vía $contenido.
Compilación con Gulp
NiBel Core integra un flujo de trabajo moderno mediante Gulp para compilar y optimizar recursos front-end (SCSS, JavaScript e imágenes). Esto mantiene el proyecto limpio y rápido en producción.
Instalación de dependencias
npm install
Ejecutar compilación en modo desarrollo
npx gulp dev
O si lo tienes configurado en package.json:
npm run gulp dev
Ubicación de archivos
src/scss/→ Archivos fuente SCSSsrc/js/→ Archivos JavaScriptsrc/img/→ Imágenes fuente (PNG/JPG)public/build/→ Salida compilada
Tareas incluidas
const { src, dest, watch, parallel } = require('gulp');
// Compilar SCSS → CSS minificado con sourcemaps
function css() { ... }
// Convertir imágenes a WebP y AVIF
function versionWebp() { ... }
function versionAvif() { ... }
// Combinar y minificar JS
function javascript() { ... }
// Modo desarrollo (watch)
function dev() { ... }
exports.dev = parallel(versionWebp, versionAvif, javascript, dev);
Salida generada
public/build/css/→ Archivos.csscompilados y minificadospublic/build/js/→ Archivos.jsconcatenados y minificadospublic/build/img/→ Imágenes optimizadas en formatos WebP y AVIF
Dependencias utilizadas
gulp-sass, gulp-plumber, gulp-concat, gulp-rename,
autoprefixer, cssnano, gulp-postcss, gulp-sourcemaps,
gulp-cache, gulp-webp, gulp-avif, gulp-terser-js
Estas herramientas garantizan un flujo de trabajo ágil y compatible con navegadores modernos. El sistema puede ampliarse fácilmente agregando nuevas tareas al archivo gulpfile.js.
API / Endpoints
Coloca endpoints REST o AJAX dentro de app/api/. Recomendada respuesta en JSON y manejo de cabeceras:
header('Content-Type: application/json; charset=utf-8');
echo json_encode($response);
Ejemplos rápidos
Conexión a Base de Datos
$mysqli = new mysqli($_ENV['DB_HOST'], $_ENV['DB_USER'], $_ENV['DB_PASS'], $_ENV['DB_NAME']);
Model\Master::setConnection($mysqli);
Respuesta JSON
public function apiUsers() {
$users = UserModel::all();
header('Content-Type: application/json');
echo json_encode($users);
}
Licencia
NiBel Core — MIT License. Puedes usar, modificar y redistribuir manteniendo atribución.
Changelog
v1.0 — Noviembre 2025
Versión inicial pública. Bootstrap, router, arquitectura MVC, carga PSR-4, estructura de carpetas y flujo de compilación con Gulp.
