"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.
Para proporcionar a melhor experiência, utilizamos tecnologias como os cookies para armazenar e/ou aceder a informações de dispositivos. O consentimento a estas tecnologias permitir-nos-á processar dados tais como comportamento de navegação ou identificações únicas neste site. O não consentimento ou a retirada do consentimento pode afectar negativamente certas características e funções.
Funcional
Sempre activo
O armazenamento ou acesso técnico é estritamente necessário para o objectivo legítimo de permitir a utilização de um serviço específico explicitamente solicitado pelo assinante ou utilizador, ou com o único objectivo de efectuar a transmissão de uma comunicação através de uma rede de comunicações electrónicas.
Preferenze
O armazenamento ou acesso técnico é necessário para o objectivo legítimo de armazenar as preferências que não são solicitadas pelo assinante ou utilizador.
Estatísticas
Arquivamento técnico ou acesso que é utilizado exclusivamente para fins estatísticos.O armazenamento técnico ou o acesso é utilizado unicamente para fins estatísticos anónimos. Sem uma intimação, cumprimento voluntário pelo seu fornecedor de serviços Internet, ou registos adicionais de terceiros, as informações armazenadas ou recuperadas apenas para este fim não podem normalmente ser utilizadas para fins de identificação.
Marketing
O armazenamento técnico ou acesso é necessário para criar perfis de utilizador para enviar anúncios, ou para seguir o utilizador num ou em vários sítios Web para fins de marketing semelhantes.