Note di biografia gramsciana, e sulle vittime italiane delle epurazioni staliniane
gramsci.giustizia.org è sviluppato grazie a Symfony. Symfony è un PHP framework per sviluppare applicazioni web. Symfony è molto popolare, molto ben documentato, e con un minimo di conoscenze di programmazione php risulta facile da capire e da utilizzare.
Symfony nasce da una idea di Fabien Potencier ed è oggi un prodotto di SensioLabs SAS, azienda registrata in Francia (RCS Nanterre 752 893 842, sede legale in 92 Victor Hugo, 92110 Clichy, FRANCE). Il codice di Symfony è utilizzabile e modificabile secondo i termini liberali della licenza MIT.
Per scoprire Symfony esplora la ricca documentazione presente a Symfony, iniziando da Getting Started.
Ad oggi, Symfony è offerto nella versione 5.0. gramsci.giustizia.org è stato sviluppato con Symfony versione 3.4 (l'aggiornamento all'ultima versione è un mio task futuro)
Il codice sottostante a gramsci.giustizia.org è sviluppato in accordo a un schema MCV (Model, Controller, View). Le prime formulazioni di euristiche di progettazione secondo uno schema MVC risalgono agli anni '70 del secolo scorso, sopratutto nell'ambito della sviluppo delle interfaccie utente; lo schema MVC è oggi molto popolare anche nell'ambito della programmazione web. Diversi framework per la sviluppo veloce di applicazioni web forniscono le opportune librerie per lo sviluppo del codice dell'applicazione secondo lo schema MVC. La documentazione offerta da Symfony include diversi tutorial di introduzione a MCV e di come Symfony ne realizzi la metodologia; per uno introduttivo e molto chiaro leggi Symfony versus Flat PHP.
Symfony inoltre facilita lo sviluppo MVC fornendo degli strumenti di scrittura assistita di codice conforme a uno schema MVC in ambiente Symfony (scaffolding). Per lo sviluppo di gramsci.giustizia.org è stato di grande aiuto SensioGeneratorBundle, ora reso obsoleto da SymfonyMakerBundle.
Per la definizione dei dati dell'appiicativo, la M di MCV, Symfony prevede la definizione di Entity. gramsci.giustizia.org comprende la definizione di una ventina di Entity, per esempio questa pagina corrisponde a un elemento della entity Page, e questo contenuto corrisponde a un elemento della entity Content. Similarmente le entity Crono e Event sono state definite per la gestione dei dati da inserire nelle Timeline cronologiche, e così per la componente Blog, ecc.. Symfony si appoggia su Doctrine, la principale libreria php per astrarre dall'interazione diretta con il sottostante database. Doctrine comprende un Database abstraction layer (DBAL) e, sulla base di questo, un Object relational mapper (ORM), che risultano ben integrati in Synfony.
Nell'insieme la programmazione è risultata veloce e intuitiva, anche divertente. Per associare un elemento di una entity a un elemento di un'altra entity, per esempio questo contenuto a questa pagina, è risultato necessaria una qualche attenzione alla gestione in Doctrine delle relazioni tra entità, o Association Mapping (leggi anche How to Work with Doctrine Associations / Relationsh).
Le funzionalità di base di gramsci.giustizia.org, la C di MCV, sono le usuali funzionalità CRUD (Create, Read, Update, Delete) presenti in ogni applicativo web un minimo performante (ovviamente alcune sono disponibili solo all'amministrazione/redattore). Symfony fornisce modalità uniformi per la loro definizione, out of the box per i casi più semplici e di facile scrittura per realizzare esigenze particolari (nel caso di gramsci.giustizia.org, per es. per passare fogli .json a Simile, vedi sotto).
Per la visualizzazione, la V di MCV, Symfony (= Fabien Potencier) ha sviluppato Twig, un template engine molto agile e ben integrato. Grazie a Twig, risulta di massima facilità definire il layout (template) della resa finale lato client indicandovi, mediante una trasparente e concisa notazione (dot notation), ove posizionare i dati relativi ad ogni specifica richiesta. La notazione permette di richiamare molto facilmente particolari dati seguendo la definizione delle proprietà degli elementi (o oggetti) delle diverse entity, anche nidificati (es.: page.content.title). Di uso forse meno immediato, ma con un minimo di attenzione pure assai performante e flessibile, risulta infine la componente per definire i moduli (form) html di inserimento lato client. Per definire un modulo per la creazione e l'aggiornamento di elementi nidificati, abbiamo seguito i suggerimenti di How to Embed a Collection of Forms.
Symfony fornisce poi una varietà di componenti per lo sviluppo di una applicativo web professionale: per definire una area riservata e sicura all'amministrazione, per definire un meccanismo di indirizzamento (routing), per gestire richieste e risposte http, e molte altre.
nota: