Vue d'ensemble
La carte du framework : ce que fait chaque classe, en une ligne. Pour le détail, chaque nom renvoie à son code source,
court et commenté. Tout est dans src/OsdAurox/, une classe par sujet.
Les principes
- Des tableaux, pas des objets. Les données circulent sous forme de tableaux PDO, du SQL jusqu'à la vue.
- Des méthodes statiques, sans état. Un singleton seulement quand une initialisation doit être conservée (configuration, connexion).
- La base de données fait référence pour les schémas, les types et les relations.
- Filtrer en entrée, échapper en sortie.
Sec::getParam()à la lecture,Sec::h()à l'affichage. - Pas de dépendance lourde. PHP, PDO, jQuery et Bootstrap. Le code se lit en une après-midi.
Base & configuration
AppConfig
|
Lit conf.php. get() échappe les valeurs, safe: true pour la valeur brute. |
Base
|
Raccourcis transverses : redirection, détection mobile, balises script/css versionnées, dieOrThrow(). |
Dbo
|
Connexion PDO unique, MySQL / MariaDB ou PostgreSQL, en SSL. |
Log
|
Journal fichier minimal (/logs), niveaux debug à error. |
ErrorMonitoring
|
En production, capte erreurs, exceptions et fatales, et les notifie. |
Données
BaseModel
|
Active Record minimal : des tableaux PDO en entrée et en sortie, méthodes statiques. Pas un ORM. |
BrutalCrud
|
CRUD générique décrit par un tableau de configuration, pour les tables très simples. |
Cache
|
Cache en fichiers plats, clé salée, durée de vie par entrée. Scalaires et tableaux. |
Dict
|
Lecture sûre dans les tableaux (clé absente, valeur par défaut). |
Formulaires & validation
Forms
|
Génère les champs HTML (input, select, date, checkbox, textarea…) déjà échappés. |
Validator
|
Valide un tableau de données selon des règles décrites en tableau (syntaxe inspirée de Dolibarr). |
FormValidator
|
Collecte les erreurs de validation et les rend au formulaire. |
Field
|
Une règle de champ, telle que lue par le Validator. |
FormsFilter
|
Filtres de liste (exact, contient, commence par, dates) sous forme de liens et de champs. |
Paginator
|
Pagination SQL (LIMIT / OFFSET) ou tableau DataTables, avec recherche. |
Sécurité
Sec
|
Filtres d'entrée (getParam, sanitize), échappement de sortie (h), rôles, rate-limit, liste blanche SQL. |
Csrf
|
Jeton CSRF par session ou par requête. |
Captcha
|
Captcha image léger, sans service externe. À coupler avec le rate-limit. |
Otp
|
Double authentification TOTP (RFC 6238), compatible Google Authenticator, Aegis… |
Ban
|
WAF maison : honeypots, motifs d'URL, User-Agent, flood de 404, bans écrits dans .htaccess. |
AbuseIp
|
Bloque les IP mal notées sur AbuseIPDB via votre propre proxy. Désactivé sans URL configurée. |
IpInfo
|
Géolocalisation d'IP via votre passerelle. Désactivé sans URL configurée. |
Vues
Flash
|
Messages flash en session (succès, info, avertissement, erreur). |
Modal
|
Modales Bootstrap générées côté serveur (classique, chargement, saisie). |
Filter
|
Filtres d'affichage : dates FR / US, troncature. |
Fmt
|
Formatage pour l'affichage (booléens…). |
I18n
|
Traductions et formats localisés, champs traduits en base (name_fr, name_en…). |
MobileDetect
|
Détection mobile / tablette par User-Agent. |
Image
|
Redimensionnement et compression d'images (Imagick). |
Js
|
Passerelle PHP vers la console JS, pour le debug. |
ViewsShortcuts
|
Liste les fichiers d'un dossier, pour un index de vues en développement. |
Échanges & services
Api
|
Réponse JSON au format commun (statut, messages, données, erreurs de validation) comprise par le JS d'Aurox. |
Mailer
|
Envoi SMTP via PHPMailer, configuré par conf.php. |
Discord
|
Notifications vers un webhook Discord (bans, erreurs). |
Côté navigateur
api-request.js
|
Appels Ajax (fetch) avec jeton CSRF, au format Api. |
validator.js
|
Affiche les erreurs de validation renvoyées par Api. |
osd_utils.js
|
Utilitaires : slug, nettoyage de saisie, erreurs de champ. |
modal-manager.js
|
Gestion des modales côté navigateur. |
osd-bp.js
|
Breakpoint Bootstrap courant de l'écran. |
À savoir avant la production
- Dans
BaseModel, les noms de colonnes et de tables passent par une liste blanche. Seul le paramètre$selectest injecté tel quel : jamais de saisie utilisateur dedans. - L'IP du visiteur est lue uniquement dans
REMOTE_ADDR. Derrière un proxy ou un CDN, configurezmod_remoteip, sinon le WAF bannira le proxy. AbuseIpetIpInfon'envoient rien tant qu'aucune URL d'API n'est configurée.- En production, HTTPS est forcé et
Strict-Transport-Securityinclut les sous-domaines.
Le détail est dans le README du dépôt. Pour installer : Démarrer.