Spécifications Industrielles · v1.0.0 Stable

Manuel
de Référence.

Ce guide constitue la source de vérité pour le développement, le déploiement et la maintenance d'applications professionnelles sur Madeline.

Cœur du Système

Installation Rapide

Initialisez votre projet Madeline en une seule commande. Si vous installez plusieurs fois, spécifiez un nom de dossier différent pour éviter les conflits :

composer create-project digitalartist/madeline-framework mon-projet-madeline

Note : Si le dossier par défaut 'madeline-framework' existe déjà, Composer refusera l'installation. Utilisez alors un nom personnalisé comme 'mon-projet-madeline'.

Le noyau de Madeline (Rek) repose sur une architecture de type micro-kernel, privilégiant l'absence de mémoire statique et une exécution synchrone rapide.

Cycle de Vie d'une Requête

  1. Point d'entrée : public/index.php initialise l'autoloader.
  2. Rek Boot : Core\App::run() charge la configuration et détecte l'état du système.
  3. Config Dispatch : Chargement de routes.php.
  4. Routage : Résolution de l'URI et exécution des middlewares.
  5. Rendu : Envoi de la réponse au client.

Madeline utilise l'objet Core\Config pour centraliser les paramètres. Les réglages sont situés dans App/Config/AppConfig.php.

use Core\Config;

// Récupération sécurisée
$dbHost = Config::get('database.host', 'localhost');

Ligeey CLI Reference

Génération (Amal)

  • amal:controller [Nom]
  • amal:model [Nom]
  • amal:migration [Nom]
  • amal:crud [Nom]

Maintenance & Serveur

  • doxal [port] : Serveur de dev.
  • setal:cache : Vidage intégral.
  • takoo:storage : Symbolic link.
  • yoon:run : Migration SQL.

Sécurité & Shield

Le système "Shield" de Madeline injecte des politiques de sécurité strictes au niveau HTTP.

Middlewares de Protection

  • CsrfMiddleware : Protection contre les contrefaçons de requêtes. Utilisez la directive @csrf dans vos formulaires.
  • SecurityHeadersMiddleware :
    • X-Frame-Options: SAMEORIGIN (Prévention Clickjacking)
    • X-XSS-Protection: 1; mode=block
    • Content-Security-Policy : Isolation des scripts et styles.

Routage & Middleware

Le routeur synchrone de Madeline gère la résolution des URIs et l'exécution de la pile de middlewares.

Définition de Routes

Les routes sont définies dans le fichier routes.php à la racine du projet.

use Core\Router;

Router::get('/hello', function() {
    return "Bonjour le monde";
});

// Avec contrôleur et middleware
Router::get('/profile', ['App\Controllers\UserController', 'profile'], ['App\Middlewares\AuthMiddleware']);

Paramètres de Route

Capturez des segments dynamiques facilement :

Router::get('/user/{id}', function($id) {
    return "ID Utilisateur : " . $id;
});

MadelineORM

L'ORM propose une sémantique Wolof unique et un système de synchronisation automatique (Zéro-Migration).

Zéro-Migration : Comment ça marche ?

Lorsque vous définissez une propriété dans un modèle, MadelineORM analyse le schéma de la table correspondante. Si la colonne est absente, elle est créée via un ALTER TABLE transparent.

class Product extends MadelineORM {
    public string $name;
    public float $price; // Création auto en DECIMAL/FLOAT dans MySQL
}

Sémantique Wolof complète

  • ->fari(['statut' => 1]) : Sélection filtrée multiset.
  • ->bindu() : Persistance immédiate (Insert/Save).
  • ->weccit() : Mise à jour thermique des données modifiées.
  • ->far() : Suppression irréversible de l'objet.
  • ->loko($id) : Extraction unitaire par identifiant.

Moteur MadelineView

Un moteur de templating haute performance compilé en PHP natif.

Directives de Templating

Directive Usage
@baat(...)Boucle Foreach (Wolof: Dire/Parler). Terminé par @jeexbaat.
@ndax(...)Structure conditionnelle (Si). Terminé par @jeexndax.
@def(...)Définition d'un bloc de contenu. Terminé par @jeexdef.
@biir(...)Injection de contenu défini/section.
@indi(...)Héritage de layout (Extends).
{{ $var }}Affichage échappé (Anti-XSS).
{!! $var !!}Affichage brut (HTML non-échappé).
@json($var)Encodage JSON automatique (Idéal pour JavaScript natif).
@csrfGénération d'un token CSRF caché pour sécuriser les formulaires POST.

Gestion des Assets

Madeline centralise la gestion des fichiers statiques (CSS, JS, Images) via une fonction globale de helper.

La fonction asset($path)

Cette fonction génère une URL absolue vers vos fichiers situés dans le dossier public/. Elle ajoute automatiquement un paramètre de version (cache-busting) basé sur la date de modification du fichier.

<!-- Dans votre layout ou vue -->
<link rel="stylesheet" href="{{ asset('css/madeline.css') }}">
<script src="{{ asset('js/madeline.js') }}"></script>
<img src="{{ asset('img/logo.png') }}" alt="Logo">

Stylesheet Global

Le framework inclut un fichier public/css/madeline.css pour vos styles globaux et variables CSS personnalisées.

Requêtes & Formulaires

Le traitement des données entrantes est simplifié par la classe Request, accessible via le helper global request().

Sémantique Wolof (jël & seet)

Madeline privilégie une syntaxe expressive pour récupérer et valider vos données.

// Dans votre contrôleur
$nom = request()->jël('nom'); // Récupère $_POST['nom'] ou $_GET['nom']

if (request()->seet(['nom' => 'required', 'email' => 'required|email'])) {
    // Validation réussie
}

Support Hybride (JSON & Fichiers)

Madeline détecte automatiquement le format de la requête (Formulaire classique ou JSON) et unifie l'accès aux données.

  • JSON : Si le client envoie du JSON, request()->input() récupère les clés directement.
  • Fichiers : Utilisez request()->file('avatar') pour accéder aux données d'upload.

Métadonnées & Sécurité

Méthode Usage
method()Retourne le verbe HTTP (GET, POST, etc.).
isPost() / isGet()Vérifie le type de requête.
ip()Retourne l'adresse IP du client.
header('Key')Récupère un en-tête HTTP spécifique.
all()Retourne l'ensemble des paramètres fusionnés.

Architecture Composants

Déclarez des composants réutilisables avec une syntaxe proche du HTML moderne.

<!-- Usage -->
<x-alert type="info">Opération réussie.</x-alert>

<!-- Rendu -->
Madeline cherche dans App/Views/Components/alert.madeline.php

Exceptions & Erreurs

Le mode LOCAL active le "Mesh Error Handler", une interface de débogage immersive affichant la stack trace et l'extrait de code fautif.

Personnalisation Production

En production, créez le fichier App/Views/errors/500.madeline.php pour proposer une interface de secours sobre à vos utilisateurs.

Chapitre VII

Configuration (AppConfig)

Madeline utilise une source de vérité unique située dans App/Config/AppConfig.php. Ce système orienté objet facilite la gestion des environnements et l'accès aux variables.

La Classe AppConfig

Toutes vos clés (Base de données, Mail, API) sont centralisées ici. Vous n'avez plus besoin de jongler avec plusieurs fichiers de configuration.

// App/Config/AppConfig.php
return [
    'name' => 'Madeline',
    'mail' => [
        'host' => 'smtp.example.com',
        // ...
    ]
];

// Utilisation
$name = \Core\Config::get('name');
$smtp = \Core\Config::get('mail.host');

Assistant d'Installation

Lors d'un premier déploiement, vous pouvez accéder à /setup pour configurer les accès essentiels via une interface graphique interactive.

Productivité

Extension VSCode (Snippets)

Pour booster votre productivité, nous proposons un pack de snippets officiels qui ajoutent l'autocomplétion pour les directives Madeline et les méthodes de l'ORM.

Installation Manuelle (v1.0)

  1. Téléchargez le fichier madeline.code-snippets.
  2. Dans VSCode, allez dans File > Preferences > Configure User Snippets.
  3. Sélectionnez New Global Snippets file... et nommez-le madeline.
  4. Copiez le contenu du fichier téléchargé dans le fichier qui s'ouvre dans VSCode.

Exemples d'utilisation

  • Tapez baat + Tab pour générer une boucle Wolof.
  • Tapez ndax + Tab pour une condition.
  • Tapez bindu sur un objet ORM pour l'enregistrer.
Chapitre VIII

Envoi de Mails & Templates

Madeline intègre un système d'envoi d'e-mails HTML élégant, s'appuyant sur le moteur de vues pour une personnalisation totale.

Usage de base

Utilisez la méthode statique Mail::send() pour envoyer un e-mail basé sur une vue.

use Packages\Mail\Mail;

Mail::send(
    'destinataire@exemple.com', 
    'Bienvenue !', 
    'mail/welcome', 
    ['name' => 'Jean']
);

Templates & Layouts

Les templates de mail sont situés dans App/Views/mail/. Vous pouvez utiliser un layout commun pour garder une identité visuelle cohérente.

<!-- App/Views/mail/layout.madeline.php -->
<div class="email-body">
    @biir('content')
</div>

Configuration

La configuration SMTP est gérée dans App/Config/AppConfig.php sous la clé mail. En mode local sans serveur mail configuré, l'envoi est simulé dans les logs PHP.

Chapitre IX

Gestion du Storage

L'abstraction Storage simplifie les opérations de fichiers sur le système local ou cloud.

use Packages\Storage\Storage;

// Enregistrement
$path = Storage::upload($_FILES['avatar'], 'profiles');

// Récupération URL
$url = Storage::url($path);
Chapitre X

Console API Interactive

Madeline intègre nativement Swagger UI pour documenter et tester vos APIs en temps réel.

  • URL : Accédez à /api/docs/ui pour l'interface graphique.
  • JSON : Le schéma OpenAPI est disponible sur /api/docs.

Cette documentation est auto-générée à partir de vos contrôleurs et de la configuration API.

Chapitre XI

Cache & Performance

Le framework est optimisé pour une exécution ultra-rapide (< 1ms pour le routage).

  • View Cache : Les vues compilées sont stockées dans storage/cache/views.
  • Turbo SPA : Grâce à madeline.js, les navigations ne rechargent que le contenu utile via AJAX/Fetch.
  • Auto-Invalidation : Le cache des vues se régénère automatiquement si le fichier source est modifié.
© Madeline Framework