NiBel Core 1.0

NiBel Core Documentación completa

Guía rápida y referencia técnica — v1.0 • © 2025 NiBel

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 SCSS
  • src/js/ → Archivos JavaScript
  • src/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 .css compilados y minificados
  • public/build/js/ → Archivos .js concatenados y minificados
  • public/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.