Ir al contenido
Nibiru docsv0.9.2

En producción

Aplicaciones reales de Nibiru generando ingresos reales. Maschinen Stockert vende maquinaria industrial en 12 países utilizando este marco.

Stable Reading time ~ 5 min Edit on GitHub

Un marco digno de usar incluye cosas. El despliegue principal de Nibiru es el grupo Maschinen Stockert — un par de repositorios que alimentan una de las plataformas de comercio electrónico más grandes de la maquinaria industrial en Austria.

Los dos repos comparten módulos y una base de datos; dividen la responsabilidad por audiencia.


Una máquina CNC industrial en un piso de fábrica a la hora dorada.

10 controladores · 18 módulos · 150 plantillas · 36,289 líneas de PHP

maschinen-stockert.de — catálogo público

El sitio para compradores. Navega y busca maquinaria industrial reacondicionada, visualiza páginas de detalles ricas con slugs amigables para SEO, regístrate para el anual Hausmesse feria comercial, solicita cotizaciones.

maschinen-stockert.de — catálogo público

Sección titulada «maschinen-stockert.de — catálogo público»

La cara pública: donde los compradores industriales llegan, buscan y convierten.

  • Contenido multilingüe, con cada cadena visible recuperada de la base de datos cms_template_texts claveada por <controller>/<action> + idioma. Los editores actualizan el texto desde el panel de administración sin necesidad de desplegar.
  • Búsqueda en motor Elasticsearch alimentada por máquinas, con filtrado sensible al tipo — dimensiones analizadas a partir de cadenas como "2500 × 1200 mm" en rangos numéricos para que los compradores puedan buscar por tamaño.
  • URLs amigables para motores de búsqueda/maschine/drehmaschine-2500/42 — generadas a partir del nombre de la máquina con normalización de umlauts alemanes (ä → ae, ß → ss). El ID numérico siempre va al final para que el enrutador pueda resolver un slug obsoleto.
  • Libros electrónicos interactivos PDF de Yumpu para catálogos descargables.
  • Módulo Hausmesse para registro en ferias comerciales con acceso basado en roles.
application/controller/maschineController.php
public function detailAction()
{
$machineId = $this->getRequest('id', true);
if (!$machineId) {
http_response_code(404);
return;
}
$controllerPath = $this->getController() . '/detail';
$cmsTemplateTexts = Cms::init($this->getController())
->loadCmsTemplateTextsByControllerPath($controllerPath, $this->language);
foreach ($cmsTemplateTexts as $t) {
View::assign([
$t['cms_template_texts_text_identifier']
=> $t['cms_template_texts_text_content']
]);
}
try {
$machine = Machine::init()->getMachine((int) $machineId);
} catch (\Throwable $e) {
$machine = null; / DB blip page still renders with fallback.
}
$machineName = $machine['ms_machines_name'] ?? "Maschine #$machineId";
$protocol = (($_SERVER['HTTPS'] ?? '') === 'on') ? 'https' : 'http';
View::assign([
'machine' => $machine,
'pageTitle' => "$machineName - Maschinen Stockert",
'metaDescription'=> "Details und Spezifikationen für $machineName",
'canonicalUrl' => $protocol . '://' . $_SERVER['HTTP_HOST']
. self::generateMachineSeoUrl($machineId, $machineName),
]);
}

50 líneas, sin contenedor DI, sin canal de validación, sin pila de middleware. Carga primero el contenido gestionado por CMS (así que un corte de base de datos en las máquinas no mata la página), extrae la máquina con una caída grácil, genera metadatos SEO siempre. La página completa se renderiza con dos viajes a la base de datos.


Una pared de libros técnicos de cuero bien usados, uno abierto en foco suave.

36 controladores · 18 módulos · 348 plantillas · 161 migraciones SQL · 37,369 líneas de PHP

data.maschinen-stockert.de — admin & API

El cockpit interno. El personal de ventas gestiona el inventario, el contenido, los trabajos, las páginas del equipo, las inscripciones a ferias comerciales. Los desarrolladores e integraciones llaman a las API REST para buscar máquinas, sincronizar fabricantes, generar PDFs, consultar a Ollama para descripciones de máquinas AI.

Los mismos módulos, tres veces los controladores y plantillas — porque las interfaces de administración y las API necesitan muchos puntos de entrada.

  • Page-tree CMS: los editores construyen páginas a partir de una plantilla Smarty; el plugin Parser escanea los marcadores de posición {$identifier} en la plantilla y genera automáticamente la interfaz de usuario del panel de administración de campos editables. La plantilla es la especificación del formulario.
  • Role-based ACL: cada constructor del controlador de administración llama a $this->user = new User(); $this->acl = new Acl(); $this->acl->init(); $this->user->validate(); — tres líneas, listo. Ventas tiene solo lectura en el inventario; los administradores pueden editar; los socios ven solo sus listados asignados.
  • Public-API whitelist: apiController permite la búsqueda de máquinas, la obtención de categorías, la información del equipo y las llamadas a Ollama AI sin autenticación, luego requiere autenticación para todo lo demás. La lista blanca está directamente en el constructor — no hay errores de ordenamiento de middleware.
  • Machineryscout indexer: el módulo más pesado. Un rasgo de 2,200 líneas que extrae máquinas + atributos + imágenes + documentos de MySQL a través de JSON_ARRAYAGG, normaliza los tipos ("2500 x 1200"dimension_width: 2500.0, dimension_height: 1200.0), sustituye marcadores de posición para imágenes faltantes y envía filas a Elasticsearch.

El patrón del Analizador — generación automática de interfaces de usuario del editor desde una plantilla

Sección titulada «El patrón del Analizador — generación automática de interfaces de usuario del editor desde una plantilla»
application/controller/adminController.php
$parser = Parser::init();
$cmsEditable = $parser->parseSmartyTemplateByTemplateId($templateId);
View::assign([
'cmsEditable' => $cmsEditable,
'cmsTemplateTextForm'=> Cms::textsEditingForm('/admin/texts/create/text/new'),
]);

Inserta una nueva plantilla Smarty en el sistema, el editor sabe de inmediato cuáles son los marcadores de posición editables. No hay un paso de “registrar los campos del formulario”.


Los cinco diferenciadores a continuación se extraen de los códigos fuente anteriores. Cada uno enlaza a su evidencia en la página ¿Por qué Nibiru.

¿Qué hace Nibiru?¿Qué hace Laravel/Symfony?
Copia de páginaCargada desde la BD por <controller>/<action> por solicitud, gestionada por el editor.Codificada en Blade / JSON de traducción; desplegar para cambiar.
Composición del módulo13 rasgos por módulo, sin DI.Proveedores de servicios + contenedor IoC.
ORMSQL directo, MySQL JSON_ARRAYAGG, Pdo::fetchAll.Entidades Eloquent / Doctrine + proxies de carga diferida.
Auth3 líneas en el constructor del controlador.Pila de middleware + clases de política + portales.
EventosSplSubject + SplObserver de la librería estándar de PHP.Despachador de eventos personalizado + registro de oyentes + cola.

Lee la desglose completa con referencias de código →


Maschinen Stockert es un sitio web real y rentable que vende maquinaria en 12 países. Movió 161 migraciones SQL con marcas de tiempo a producción sin ningún framework de migración, 74,000 líneas de PHP en dos repositorios sin contenedor de servicios, y 18 módulos que se componen con rasgos en lugar de herencia. El equipo que lo construyó y opera es pequeño.

Eso es la prueba.

Si estás trabajando con un equipo pequeño y en un presupuesto apretado, donde los despliegues y el tiempo de inactividad cuestan dinero real — eso es el punto fuerte de Nibiru. Lee la Guía Rápida, luego regresa.