Gestire db in PHP5 (Parte IV)
Pagina 4 di 8
Il compito successivo sarà l'utilizzo del file XMLpreparato per la generazione delle classi che andremo adutilizzare nella nostra applicazione. Lo stesso processo digenerazione è eseguito con l'aiuto di unostrumento di nome Phing, che è un sistema diautomatizzazione della costruzione di progetti con unafilosofia di funzionamento simile a make ed un modello ant diJava.
Dopo aver correttamente installato l'intero ambiente dilavoro (maggior informazioni si trovano nel frameInstallazione), sarà sufficiente eseguire ilcomando: phing -Dproject=[nome progetto] dalla cartella incui si trova il file build.xml. In pratica vengonogenerati file e cartelle, le cui strutture sono mostratenella Fig. 4. Il contenuto delle sottocartelle di nomemap e om viene scritto in caso di ripetizionedella generazione delle classi (ad es. dopo modifiche nellastruttura del DB), quindi non vanno eseguite modifichemanuali. Queste cartelle assolvono alle seguenti funzioni :
• map (dall'ingl. mapping) conserva leclassi contenenti la descrizione della struttura del DB, ilmodello degli oggetti ed i loro reciproci collegamenti.
Costituiscono le rappresentazioni delle informazionicontenute nel file XML, ma in forma di classi PHP. Grazie aquesto, l'uscita di tutte le meta-informazioni necessariedurante il fun-zionamento dell'applicazione sonodis-ponibili immediatamente, senza dover eseguire il parserdel file XML. Per ognuna delle tabelle trascritte nel fileXML viene generata una classe di nome[NomeTabella]MapBuilder.php. Per quanto eseguiremodifiche manuali in questi file non sia proibito, possiamoutilizzare, per queste operazioni,le classi generate perottenere informazioni sulle strutture delle tabelle, ad es.le liste di colonne
• om (dall'inglese. objectmapping)è la cartella contenente le classiresponsabili dell'utilizzo degli oggettinell'applicazione, in particolare peril loro mapping alleistruzioni SQL. Per ogni tabella che si trova in XML,otteniamo due classi generate automaticamente:Base[NomeTabella].php eBase[NomeTabella]Peer.php. La pri-ma delle qualicorrisponde ai singoli record nella tabella. La seguenteBase[NomeTabella]Peer rappresenta i dati e le operazionirelativi all'intera tabella
Dopo aver parlato del contenuto della cartella omsarà facile capire cosa è presente nellacartella principale. I file di nome[NomeTabella]Peer.php e [NomeTabella].phpcontengono le de-finizioni della classe, che ampliano leclassi della sottocartella om. I file che si trovanonella cartella principale sono stati preparati dallacostruzione – qui possiamo apportare le nostremodifiche e sviluppi; l'effetto del nostro operato nonverrà scritto in caso di ripetizione della generazionedel progetto. Nella Fig. 5 vediamo il diagramma UML per tuttele classi sopra citate.
Siamo già abbastanza vicini all'attivazione di unesempio simile a quello presentato nel Listing 2. Rimane soloda costruire la tabella creatrice della struttura deldatabase e della configurazione dei parametri dicollegamento. Anche nel primo compito ci aiuta Propel:abbiamo già descritto prima la struttura del DB,creatore del file XML. Propel è in grado di utilizzarele sue informazioni. Sarà sufficiente inserirgli iparametri del database (tipo e dati necessari per allacciareil collegamento) ed eseguire il comando:
phing -Dproject=[nome progetto] §
-Dtarget=insert-sql
In alternativa, possiamo eseguirela preparazione del file SQLmanualmente (il file si trova nella cartellabuild/sql/schema.sql). Se utilizzeremo la direttivaPhing operante sul database, dovremo in aggiunta definire iparametri di collegamento nel file build.properties.
L'effetto del processo di generazione è unasottocartella di nome build (nella cartella delprogetto, dove abbiamo collocato il file schema.xml).Essa contiene le sottocartelle: conf, classes esql. Della cartella sql abbiamo giàparlato, rimangono due classi contenenti i file generati e leconfigurazioni ad essi relativi. Un esempio di utilizzoè il Listing 2.
- Articolo precedente Database in PHP5 con Propel (Parte V)
- Articolo successivo Gestione efficace dei database con PHP 5 (Parte VI)