Gestione dei database in PHP5 (Parte II)
Pagina 2 di 8
Propel dall'interno
Utilizzando la libreria Propel, evitiamo queste procedurefaticose e rendiamo indipendente la nostra applicazione a undatabase specifico. Diamo un'occhiata al Listing 2. Viè presentato un codice che esegue le stesseoperazioni, dello script del Listing 1. Tuttavia non vitroviamo neanche una query diretta al DB. Non effettuiamocollegamenti, né trasferiamo query al SQL. Eseguiamoinvece, semplici operazioni sugli oggetti. Il nostroprogramma è separato dal relativo databasedall'aggiunta di un Abstraction Layer il cui compitoè convertire le operazioni sugli oggetti incorrispondenti query al DB e viceversa. Tale AbstractionLayer è denominato ORM (ingl. Object RelationalMapping). Maggiori dettagli sull'ORM si trovano nelframe ORM e Propel.
Conseguentemente al suo ruolo, l'Abstraction Layer di ORMdeve possedere informazioni sul database, sul modellodell'applicazione orientato agli oggetti e su comecollegare reciprocamente questi due mondi. Propel utilizza aquesto scopo un file XML. Ricordiamo tuttavia che PHP nontrattiene nessun dato dall'esecuzione degli script.Tralasciando concetti di software engineering di difficilecomprensione diciamo semplicemente che 118-propel-generatorconverte i file XLM in classi PHP e 118-propel-runtimepermette l'attivazione delle classi generate. Nella Fig.3 è presentato schematicamente il funzionamento diPropel.
Listing 2. Servizio del form di esempio inPropel
<?php$old_inc_path = ini_get('include_path');ini_set('include_path',$old_inc_path.';F:/www/phpsolmag/propel/118-propel-1.0.0/runtime/classes');require_once('propel/Propel.php');Propel::init(dirname(__FILE__).'/conf/bookstore-conf.php');include_once 'bookstore/Publisher.php';include_once 'bookstore/Author.php';include_once 'bookstore/Book.php';$pub = new Publisher();$pub->setName($_POST['publisher_name']);$author = new Author();$author->setFirstName($_POST['firs_name']);$author->setLastName($_POST['last_name']);$book = new Book();$book->setTitle($_POST['title']);$book->setIsbn($_POST['isbn']);$book->setPublisher($pub);$book->setAuthor($author);$book->save();?>
Installazione
La libreria Propel richiede:
• PHP5 con supporto XSLT ed utilizzo di DB
• pacchetto PEAR::Log
• pacchetto Phing 2.0
• Abstraction Layer per DB - Creole
Il pacchetto PEAR::Log lo prendiamo scrivendo il comando pearinstall Log. Per installare Propel, possiamo utilizzarel'installatore PEAR ed installare generator e runtime:
pear installhttp://propel.phpdb.org/pear/propel_generator-current.tgz
pear installhttp://propel.phpdb.org/pear/propel_runtime-current.tgz
Possiamo anche installare Propel manualmente. Scarichiamo intal caso, l'archivio unico e scompattiamolo nellacartella che abbiamo scelto. Dopo aggiungiamo le classiPropele Creole all' include_path.
Phing richiede l'impostazione aggiuntiva delle variabiliambientali PHING_HOME e PHP_CLASSPATH. La prima delle qualiindica il luogo di installazione di Phing e la se-condadefinisce la collocazione delle classi presenti nel progettoPhing, Creole e Propel.
Le impostazioni descritte sono necessarie soltanto inambiente di programmazione. Nel progetto pronto èsufficiente definire solo include_path (classi Propel eCreole), ad es. dall'interno dello script, utilizzando ilcomando ini_set('include_path', '[Percorso alleclassi118-propel-runtime e Creole]');.
- Articolo precedente Propel, la gestione efficace e comoda dei database in PHP5 (Parte I)
- Articolo successivo Gestire database in PHP 5 (Parte III)