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 :
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
- Point d'entrée :
public/index.phpinitialise l'autoloader. - Rek Boot :
Core\App::run()charge la configuration et détecte l'état du système. - Config Dispatch : Chargement de
routes.php. - Routage : Résolution de l'URI et exécution des middlewares.
- 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
@csrfdans vos formulaires. - SecurityHeadersMiddleware :
X-Frame-Options: SAMEORIGIN(Prévention Clickjacking)X-XSS-Protection: 1; mode=blockContent-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). |
@csrf | Gé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.
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.
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)
- Téléchargez le fichier madeline.code-snippets.
- Dans VSCode, allez dans
File > Preferences > Configure User Snippets. - Sélectionnez
New Global Snippets file...et nommez-lemadeline. - 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
bindusur un objet ORM pour l'enregistrer.
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.
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);
Console API Interactive
Madeline intègre nativement Swagger UI pour documenter et tester vos APIs en temps réel.
- URL : Accédez à
/api/docs/uipour 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.
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é.