---
title: "Modul- und Controllergerüste"
description: "Generieren Sie Controller, Module und Plugins mit der Befehlszeilenschnittstelle (CLI)."
---

## Controller
```bash
./nibiru -c products
```
Erstellt zwei Dateien:
```
application/controller/productsController.php
application/view/templates/products.tpl
```
Der Controller-Stub:
```php
<?php
namespace Nibiru;
use Nibiru\Adapter\Controller;

class productsController extends Controller
{
    public function pageAction() {
        View::assign(['title' => 'Products']);
    }

    public function navigationAction() {
        JsonNavigation::getInstance()->loadJsonNavigationArray();
    }
}
```
Die Vorlagestub:
```smarty
{include 'shared/header.tpl'}
<body>
{include file="navigation.tpl"}
<main class="container">
  <h1>{$title}</h1>
</main>
{include 'shared/footer.tpl'}
</body>
```
Controller sind nur PHP-Dateien – keine JS- oder CSS-Skelettstruktur, sodass Sie die Verwaltung der Assets selbstständig steuern können.

## Module
```bash
./nibiru -m billing
```
Erstellt:
```
application/module/billing/
├── billing.php
├── interfaces/billing.php
├── plugins/
├── settings/billing.ini
└── traits/
```
Die Hauptklasse implementiert `IModule` und macht einen Konstruktor verfügbar, der die Registrierungskonfiguration des Moduls lädt. Fügen Sie den Flag `-g` hinzu, um die Graylog-Observer-Wiring standardmäßig einzubinden:
```bash
./nibiru -m billing -g
```
Wenn `-g` gesetzt ist, importiert das Scafolding einen `Graylog`-Observer, fügt ihn im Konstruktor hinzu und gibt bei wichtigen Zustandsänderungen `notify()` aus – sodass jeder GELF-fähige Graylog-Server die Modulereignisse ohne zusätzliche Anpassungen aufnimmt.

## Plugins

Ein Plugin lebt innerhalb eines Moduls:
```bash
./nibiru -p invoices -m billing
```
Erstellt `application/module/billing/plugins/invoices.php`:
```php
<?php
namespace Nibiru\Module\Billing\Plugin;
use Nibiru\Module\Billing\Billing;

class Invoices extends Billing
{
    public function listOpen(): array
    {
        return \Nibiru\Pdo::fetchAll(
            'SELECT * FROM invoices WHERE status = :s ORDER BY due_date',
            [':s' => 'open']
        );
    }
}
```
Plugins erben vom Modul und teilen daher dessen Registry, Einstellungen und Observer-Maschinerie.

## Bootstrap (`-s`)

`./nibiru -s` wird nach der Installation (oder nach dem Abrufen eines frischen Checkout) ausgeführt, um:

- Erstellen Sie `application/view/templates_c/` und `application/view/cache/`, falls diese fehlen.
- Überprüfen und korrigieren Sie die Berechtigungen (schreibbar für den Webserver-Benutzer) dieser Ordner.
- Stellen Sie sicher, dass die erforderlichen PHP-Erweiterungen geladen sind.
- Überprüfen Sie, ob der Datenbanktreiber in Ihrer INI-Datei von diesem Binärbuild unterstützt wird.

Es ist sicher, mehrmals zu führen.

## Cache leeren (`-cache-clear`)

Löscht sowohl den Smarty-Kompilierungs-Cache als auch den gerenderten HTML-Cache:
```bash
./nibiru -cache-clear
```
Führen Sie nach einer Bereitstellung aus, wenn:
- Sie `.tpl`-Dateien geändert haben,
- Sie die `[ENGINE]`-Caching-Einstellungen geändert haben,
- Sie Smarty-Plugins modifiziert haben.

Der Cache wird beim nächsten Anfrage erneut generiert.
