"Right effort is like tuning a lute: neither too tight to snap, nor too loose to play."
Siddhartha Gautama
Italix Framework
Italix non è un framework monolitico che installi e dentro cui vivi — è una famiglia di librerie PHP indipendenti, ciascuna con uno scopo preciso, che insieme compongono un framework. Ognuna risolve esattamente un problema, viene pubblicata da sola su Packagist ed è testata da sola. Prendi solo ciò che ti serve; nulla arriva come peso morto.
Esplicito invece che magico. Ogni dipendenza di cui una classe ha bisogno è dichiarata in un metodo statico depends_on() — si legge dall’alto verso il basso come una lista della spesa, non viene risolta a runtime da un container che ispeziona il costruttore tramite reflection. Questa singola scelta è il motivo per cui il framework è veloce all’avvio e, altrettanto importante, veloce da leggere: per sapere “di cosa ha bisogno questa classe per funzionare” basta guardare un metodo, non seguire le regole di autowiring di un container.
Pensato per un codice leggibile e disciplinato. Ogni identificatore — variabili, funzioni, metodi, proprietà — è in snake_case, con un piccolo insieme di postfissi coerenti (_id, _dt, _n, _c…) che ti dicono che tipo di valore stai guardando ancora prima di aver letto la logica. La convenzione è imposta da un linter (libs:check), non è solo una linea guida — quindi non si degrada mai in silenzio.
Davvero leggero, il che significa davvero veloce. Pochi livelli tra una richiesta e il tuo codice, nessuna risoluzione di DI basata su reflection ad ogni avvio, nessuna astrazione ORM impilata su un’altra astrazione. Non è solo un vantaggio in velocità di esecuzione — è anche il motivo per cui l’intero codice resta leggibile man mano che cresce.
Pensato per come si scrive software oggi. Un codice piccolo, coerente e con poca magia non è solo più facile da tenere a mente per una persona — è anche molto più economico e veloce da usare insieme a un assistente AI per la programmazione. Meno boilerplate e nessun collegamento nascosto a runtime da decifrare significano che un AI pair-programmer spende i suoi token sul tuo problema reale, non per capire come funziona il framework — così le funzionalità arrivano prima e costano meno da sviluppare.
Include già tutto ciò di cui un’applicazione reale ha davvero bisogno
Un framework di test completo e senza dipendenze (italix/testing) — un client HTTP in-process, factory di righe derivate dallo schema, isolamento tramite rollback — così le suite di test non devono trascinarsi dietro PHPUnit solo per verificare che una route funzioni.
Tabelle e alberi di dati lato server già pronti (italix/datasets) — basati su Tabulator, con colonne e azioni dichiarate in PHP.
Un livello completo per i form (italix/forms) — costruisci un form HTML validato direttamente dallo schema di una tabella, senza markup scritto a mano.
Calendari e feed di eventi (italix/calendars) — sorgenti dichiarate in PHP, un driver genera la configurazione lato client.
Un pattern CRUD a template-method (BaseAdminAction) che ti dà un pannello admin funzionante — elenco, creazione, modifica, cancellazione, validazione — a partire da quattro metodi brevi, non una riscrittura per ogni risorsa.
Qualche altro vantaggio che vale la pena conoscere
La sicurezza non è aggiunta in un secondo momento. La codifica dell’output è un tipo, non un’abitudine (italix/encode) — un linter dei template individua l’output non codificato prima che vada in produzione. Le sessioni portano di default elenco dei dispositivi, revoca, rilevamento dei replay e ri-autenticazione step-up (italix/session). I file caricati vengono salvati tramite hash del contenuto, con il MIME rilevato e verificato su una whitelist, senza mai fidarsi del nome file fornito da chi chiama (italix/storage).
Validazione onesta, non solo vero/falso. Il motore delle regole restituisce un vero e proprio terzo verdetto — sconosciuto — per i controlli che non può realmente confermare, invece di dichiarare in silenzio qualcosa come valido quando in realtà non lo ha mai verificato. Codici di errore macchina ovunque, non prosa da interpretare.
Internazionalizzazione vera, non semplici tabelle di stringhe: categorie plurali basate su ICU/CLDR, numeri, valute e date sensibili alla locale.
Si integra bene con il resto dell’ecosistema PHP. PSR-15, PSR-11, PSR-16, PSR-7 ovunque — è un framework, non un giardino recintato: strumenti PHP standard e pacchetti conformi agli standard si inseriscono senza attriti.
Italix Libs
Un framework PHP modulare, costituito da librerie Composer indipendenti e pubblicamente disponibili — scegli solo ciò che ti serve, dal routing all’ORM, dalla validazione all’i18n e ai test.
Contratti condivisi (interfacce) per le librerie Italix — permette un’integrazione fluida tra italix/orm, italix/forms e le altre librerie compatibili.
Motore PSR-15, pipeline di middleware, registro dei servizi, controller con dipendenze dichiarate, motore di viste con layout a blocchi, sessioni e traduzioni.
Route con nome e generazione di URL: dichiara una route una sola volta, collegati ad essa per nome, e ottieni un errore esplicito in fase di generazione invece di un 404 più avanti.
Codifica dell’output sensibile al contesto, come tipo: testo HTML, attributi, URL e JSON, con un linter dei template che individua output non codificato.
Tabelle e alberi di dati lato server: definizioni di colonne e azioni in PHP, configurazione client generata da un driver, nomi di colonna in whitelist.
Vocabolario ed esecutore di validazione: codici di errore macchina invece di prosa, e un terzo verdetto — sconosciuto — per i controlli che non può onestamente stabilire.
Autenticazione con password con un ordine resistente ai leak, e policy di autorizzazione che possono astenersi dal decidere. Non include alcuna tabella né gestione delle sessioni.
Sessioni come record su un soggetto e un tenant: elenco dei dispositivi, revoca per singolo account, rilevamento dei replay, ri-autenticazione step-up, limiti di concorrenza e store collegabili.
Traduzione e formattazione basate su ICU: categorie plurali CLDR, numeri, valute e date sensibili alla locale, e un estrattore di chiavi che rifiuta di indovinare.
Runner CLI del framework: comandi elencati, non scoperti automaticamente, dipendenze dichiarate come in un controller, container PSR-11, codici di uscita che hanno un significato.
Storage di file in cui chi lo chiama non sceglie mai il nome del file: percorsi basati sull’hash del contenuto, estensione dedotta dal MIME rilevato tramite whitelist.
Un contratto di conversione di formato a coppie e un registro di driver a percorso più breve — l’infrastruttura condivisa tra italix/documents e italix/media, di cui nessuno dei due è proprietario.
Eventi con nome e listener dichiarati: stampabili, senza wildcard, senza cancellazione, e un listener che lancia un’eccezione non trascina con sé il dispatcher.
Coda basata su database e scheduling cron: payload JSON invece di oggetti serializzati, presa in carico atomica, backoff, ripristino dei worker bloccati.
Email transazionali che non possono fallire in silenzio: la riga di log viene scritta prima ancora di toccare il trasporto. SMTP incluso nel core, PHPMailer opzionale.
Um Ihnen ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Die Verweigerung oder der Entzug der Zustimmung kann sich nachteilig auf bestimmte Merkmale und Funktionen auswirken.
Funktionell
Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten, vom Teilnehmer oder Nutzer ausdrücklich gewünschten Dienstes zu ermöglichen, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Preferenze
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistik
Technische Archivierung oder Zugriff, der ausschließlich zu statistischen Zwecken verwendet wird.Die technische Speicherung oder der Zugriff erfolgt ausschließlich zu anonymen statistischen Zwecken. Ohne eine Vorladung, die freiwillige Zustimmung Ihres Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht zu Identifizierungszwecken verwendet werden.
Marketing
Die technische Speicherung oder der Zugriff ist notwendig, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer oder mehreren Websites für ähnliche Marketingzwecke zu verfolgen.