Zum Inhalt springen
Nibiru docsv0.9.2

Im Produktionsumfeld

Echte Nibiru-Anwendungen bringen echtes Einkommen. Maschinen Stockert verkauft industrielle Maschinen in 12 Ländern auf diesem Framework.

Stable Reading time ~ 4 min Edit on GitHub

Ein Framework, das sich lohnt zu verwenden, bringt Dinge mit. Der Flaggschiff-Nibiru-Bereitstellung ist die Maschinen Stockert-Gruppe – eine Paar von Repositorys, die einen der größten industriellen-Geräte-E-Commerce-Plattformen Österreichs betreiben.

Die beiden Repositories teilen Module und eine Datenbank; sie teilen die Verantwortung nach Publikum.


Ein industrieller CNC-Maschinenaufbau auf einem Fabrikflur zur goldenen Stunde.

10 Steuerungen · 18 Module · 150 Vorlagen · 36.289 Zeilen PHP

maschinen-stockert.de — öffentlicher Katalog

Die Verkaufsseite. Durchsuchen und suchen Sie gebrauchte industrielle Maschinen, zeigen Sie reiche Detailseiten mit SEO-freundlichen Slug an, melden Sie sich für das jährliche Hausmesse-Messeveranstaltung an, fordern Sie Angebote an.

Die öffentliche Seite: Dies ist der Ort, an dem industrielle Käufer landen, suchen und umwandeln.

  • Multilingual content, bei dem jeder sichtbare String aus der cms_template_texts Datenbank abgerufen wird, die durch <controller>/<action> + Sprache indiziert ist. Redakteure aktualisieren den Text im Admin-Bereich ohne einen Deployment.
  • Elasticsearch-gestützte maschinelles Suchen, mit typbewusster Filterung — Abmessungen werden aus "2500 × 1200 mm" Zeichenketten in numerische Bereiche analysiert, sodass Käufer nach Größe suchen können.
  • SEO-freundliche URLs/maschine/drehmaschine-2500/42 — generiert aus dem Maschinenname mit Normalisierung der deutschen Umlaute (ä → ae, ß → ss). Die numerische ID steht immer am Ende, sodass der Router einen veralteten Slug auflösen kann.
  • Yumpu PDF Flipbooks für herunterladbare Kataloge.
  • Hausmesse Modul für die Anmeldung auf Messestandsmitte mit rollenbasiertem Zugriff.
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 Zeilen, kein Dependency Injection Container, kein Validierungs-Pipeline, kein Middleware Stack. Lädt zuerst die von der CMS verwaltete Kopie (damit eine Datenbankausfall auf den Maschinen die Seite nicht zerstört), zieht die Maschine mit einem sanften Fallback, generiert SEO-Metadaten immer. Die gesamte Detailseite wird in zwei Datenbank-Round-Trips gerendert.


Eine Wand aus gut benutzten technischen Lederbüchern, eines davon im Weichfokus geöffnet.

36 Controller · 18 Module · 348 Vorlagen · 161 SQL-Migrationen · 37.369 Zeilen PHP

data.maschinen-stockert.de — Admin & API

Das interne Cockpit. Vertriebsmitarbeiter verwalten den Bestand, Inhalte, Aufträge, Teamseiten und Messeanmeldungen. Entwickler und Integrationen rufen REST-APIs auf, um Maschinen zu suchen, Hersteller zu synchronisieren, PDFs zu generieren und Ollama für künstliche Intelligenz-basierte Maschinendescriptions abzurufen.

Die gleichen Module, dreimal so viele Controller und Templates – weil Admin-Benutzeroberflächen und APIs viele Einstiegspunkte benötigen.

  • Page-tree CMS: Redakteure erstellen Seiten aus einer Smarty-Vorlage; das Parser-Plugin durchsucht die Platzhalter {$identifier} in der Vorlage und generiert automatisch die Bearbeitungsformularschnittstelle für den Admin-Bereich. Die Vorlage ist die Formulierungsspezifikation.
  • Rollenbasierte ACL: jeder Konstruktor des Admin-Controllers ruft $this->user = new User(); $this->acl = new Acl(); $this->acl->init(); $this->user->validate(); – drei Zeilen, fertig. Vertrieb hat nur Lesezugriff auf den Bestand; Administratoren können bearbeiten; Partner sehen nur ihre zugewiesenen Einträge.
  • Public-API-Zulassungsliste: apiController erlaubt maschinenbasierte Suchen, Kategorieabrufe, Teaminformationen und Ollama-AI-Aufrufe ohne Authentifizierung, erfordert dann jedoch Authentifizierung für alles andere. Die Zulassungsliste befindet sich direkt im Konstruktor – keine Probleme mit der Reihenfolge des Middlewares.
  • Machineryscout Indexer: das schwerste Modul. Ein 2.200-Zeilen-Trait, das Maschinen + Attribute + Bilder + Dokumente aus MySQL über JSON_ARRAYAGG zieht, normalisiert die Typen ("2500 x 1200"dimension_width: 2500.0, dimension_height: 1200.0), ersetzt Platzhalter für fehlende Bilder und schreibt Zeilen in Elasticsearch.

Der Parser-Muster — automatische Generierung von Editor-Benutzeroberflächen aus einer Vorlage

Abschnitt betitelt „Der Parser-Muster — automatische Generierung von Editor-Benutzeroberflächen aus einer Vorlage“
application/controller/adminController.php
$parser = Parser::init();
$cmsEditable = $parser->parseSmartyTemplateByTemplateId($templateId);
View::assign([
'cmsEditable' => $cmsEditable,
'cmsTemplateTextForm'=> Cms::textsEditingForm('/admin/texts/create/text/new'),
]);

Fügen Sie eine neue Smarty-Vorlage ins System ein, der Editor weiß sofort, welche Platzhalter bearbeitet werden können. Es gibt keinen Schritt zur “Registrierung der Formularfelder”.


Die fünf Unterschiedsmaker unten stammen aus den darüberliegenden Codebasen. Jeder verweist auf seine Beweise auf der Seite Warum Nibiru.

Was Nibiru machtWas Laravel/Symfony macht
SeitenkopieAus der Datenbank per Anfrage durch <controller>/<action> geladen, von einem Editor verwaltet.Hardschrieben in Blade / Übersetzungs-JSON; für Änderungen bereitstellen.
Modulkomposition13 Traits pro Modul, keine DI.Dienstanbieter + IoC-Container.
ORMDirekte SQL, MySQL JSON_ARRAYAGG, Pdo::fetchAll.Eloquent / Doctrine-Entitäten + Lazy-Loading-Proxys.
Authentifizierung3 Zeilen im Controller-Konstruktor.Middleware-Stack + Policy-Klassen + Gates.
EreignisseSplSubject + SplObserver aus der PHP Standardbibliothek.Benutzerdefinierter Event-Dispatcher + Listener-Registry + Warteschlange.

Lesen Sie die vollständige Ausbreakdown mit Codeverweisen →


Maschinen Stockert ist eine echte, einkommensgenerierende Website, die Maschinen in 12 Ländern verkauft. Sie hat 161 timestamped SQL-Migrationen ohne Migrationsframework in die Produktion übertragen, 74.000 Zeilen PHP über zwei Repositories ohne Dienstcontainer und 18 Module, die mit Traits anstelle von Vererbung zusammengesetzt werden. Das Team, das es erstellt und betreut, ist klein.

Das ist die Beweisnachweisung.

Wenn Sie mit einer kleinen Team und einem engen Budget in die Produktion gehen, bei der Abstimmungen und Ausfallzeiten echtes Geld kosten — das ist der Nibiru-Sweet Spot. Lesen Sie den Schnellstart, dann kommen Sie zurück.