---
title: "Modules et contrôleurs de conception"
description: "Générez des contrôleurs, des modules et des plug-ins avec la CLI."
---

## Contrôleurs
```bash
./nibiru -c products
```
Crée deux fichiers :
```
application/controller/productsController.php
application/view/templates/products.tpl
```
Le squelette du contrôleur :
```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();
    }
}
```
Le modèle squelette :
```smarty
{include 'shared/header.tpl'}
<body>
{include file="navigation.tpl"}
<main class="container">
  <h1>{$title}</h1>
</main>
{include 'shared/footer.tpl'}
</body>
```
Les contrôleurs sont des fichiers PHP uniquement — pas de squelette JS ou CSS, donc vous restez en contrôle du cordonnage des actifs.

## Modules
```bash
./nibiru -m billing
```
Crée :
```
application/module/billing/
├── billing.php
├── interfaces/billing.php
├── plugins/
├── settings/billing.ini
└── traits/
```
La classe principale implémente `IModule` et expose un constructeur qui charge la configuration de registre du module. Ajoutez l'indicateur `-g` pour inclure le câblage observateur Graylog par défaut :
```bash
./nibiru -m billing -g
```
Lorsque `-g` est défini, le squelette importe un observateur `Graylog`, l'attache dans le constructeur et émet `notify()` lors des changements d'état clés — de sorte que tout serveur Graylog capable de GELF capture les événements du module sans aucune configuration supplémentaire.

## Plugins

Un plugin vit à l'intérieur d'un module :
```bash
./nibiru -p invoices -m billing
```
Créez `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']
        );
    }
}
```
Les plugins héritent du module, donc ils partagent son registre, ses paramètres et sa machine d'observation.

## Bootstrap (`-s`)

`./nibiru -s` s'exécute après l'installation (ou après avoir effectué un nouveau checkout frais) pour :

- Créez `application/view/templates_c/` et `application/view/cache/` s'ils sont manquants.
- Vérifiez les autorisations (écrivables par l'utilisateur du serveur web) sur ces dossiers.
- Vérifiez que les extensions PHP requises sont chargées.
- Vérifiez que le pilote de base de données dans votre INI est pris en charge par cette version binaire.

Il est sûr de le lancer plusieurs fois.

## Effacement du cache (`-cache-clear`)

Efface à la fois le cache de compilation de Smarty et le cache du HTML rendu :
```bash
./nibiru -cache-clear
```
Exécutez après un déploiement lorsque :
- Vous avez modifié des fichiers `.tpl`,
- Vous avez changé les paramètres de mise en cache `[ENGINE]`,
- Vous avez modifié des plug-ins Smarty.

Le cache se régénère à la prochaine requête.
