Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

dooPHP, il veloce framework per PHP

Guida ai framework PHP: dooPHP
Guida ai framework PHP: dooPHP
Link copiato negli appunti

Questo articolo fa parte di una serie dedicata alla comparazione di Framework PHP.

DooPHP

DooPhp si presenta come uno dei tanti framework che promette di produrre tanto scrivendo pochissimo codice. Il framework supporta esclusivamente le versioni di Php a partire dalla 5.1. Questa cosa esclude il suo utilizzo se si dispone di una versione precedente del Php, compresa la 5.0.

Installazione

Dopo avere scaricato il framework si è quasi pronti a lavorare. Scompattando i file nella directory di lavoro vi troverete di fronte a tre cartelle. Quella che ci interessa è la cartella app che contiene la nostra applicazione. In queste condizioni l'applicazione sarà disponibile all'indirizzo http://nomehost/cartellaDooPhp/app/. Per rendere le cose più semplici conviene modificare il file common.conf che si trova nella cartella protected/config e modificare i valori delle costanti SITE_PATH e BASE_PATH in base alle vostre esigenze.

Pattern MVC

DooPhp supporta nativamente il pattern MVC. Infatti all'interno della cartella app troverete le tre sottocartelle corrispondenti: controller, model e view. Ogni controller è una classe estesa della classe base DooController. In esso ci sono le varie azioni richieste. Ogni azione corrisponde ad un metodo. Il metodo index rappresenta l'azione di default per quel controller. Per accedere al controller basta puntare al seguente indirizzo: index.php/nomecontroller/azione

In caso l'azione sia omessa viene attivato il metodo index. È ovviamente possibile passare parametri via query string al controller. Ci sono due modi per farlo: il tradizionale e quello proprio del framework. Nel primo caso è ovviamente sufficiente aggiungere la sintassi index.php/nomecontroller/azione/?par1=val1&par2=val2.

Niente di nuovo.

Una comoda caratteristica del framework invece, probabilmente inclusa per ottenere url "seo friendly", è quella di passare i parametri semplicemente accodandoli all'url e dividendoli con il carattere di slash "/". L'esempio precedente diventa: index.php/nomecontroller/azione/val/val2.

Questi parametri li ritroveremo nella proprietà del controller params.

Passiamo ora alla nota dolente delle viste. Esistono due diverse cartelle. Una chiamata view e una viewc. La differenza è fondamentale. Nella prima potranno andare solo i file di tipo html mentre nella seconda esclusivamente i file con estensione php. Per renderizzare una qualsiasi delle viste presenti nelle cartelle è sufficiente passare il nome del file al metodo render. Il guaio che il metodo render è diverso a secondo se vogliamo renderizzare le pagine php o html ed è un metodo dell'oggetto view del controller.

Quindi, nei metodi del controller, dovremmo scrivere per renderizzare la vista una cosa del tipo

$this->view()->render('NOMEFILESENZAESTENSIONE',$data); // per i file html

Oppure

$this->view()->renderc('NOMEFILESENZAESTENSIONE',$data); // per i file php

$data è un array associativo passato alla vista.

È opinabile la scelta degli autori di suddividere le viste in due gruppi. In un framework Php mi aspetto che le viste siano di tipo Php che, per quanto ne so, possono renderizzare benissimo anche l'html. Ma il problema principale è rappresentato dal modo di come viene utilizzato l'array $data. Nelle viste Php si fa semplicemente riferimento all'array mentre nel caso delle pagine html la chiave dell'array viene inserita tra doppie parentesi graffe. Quindi si imparano due cose per farne una!

$data['chiave'] // nella vista php
{{chiave}} // nella vista html

L'ultimo pezzo che manca del MVC è il model. I model si trovano ovviamente nella cartella model della nostra applicazione e rappresentano delle normali classi. Generalmente il loro nome corrisponde col nome della tabella nel database che rappresentano. Un model può anche non rappresentare una tabella del database. Per riferirsi al model all'interno del controller si usa la seguente sintassi :

Doo::loadModel('nomeDelModel');
$mioModel = new nomeDelModel;

Database

DooPhp, grazie all'utilizzo dei PHP Data Objects (PDO), supporta l'ORM. Il database viene configurato nel file protected/config/db.conf.php. Da notare, cosa molto gradita, che ci sono due array di configurazione: uno per la fase developer (dev) e uno per la fase production (prod). Basta quindi modificare il parametro APP_MODE, nel file di configurazione common.conf, per switchare tra le due configurazioni. È necessario decommentare la riga che include il file di configurazione del database nel file index.php. Le operazioni principali sulle tabelle sono gestite in modo molto semplice dal framework stesso. In un controller è possibile scrivere il seguente codice per ...

$this->db()->find('model'); // per fare una ricerca
$this->db()->update($model); // per aggiornare un record
$this->db()->insert($model); // per inserire un record

$model rappresenta un 'istanza del model che a sua volta rappresenta una tabella del database.

Il problema è che nel model devono essere definiti il nome della tabella, della chiave primaria, e di tutti i campi come proprietà dello stesso model. Senza contare che nel file di configurazione del database devono essere inserite le varie relazioni tra le tabelle. Pare che ci sia un modulo per la creazione automatica, ma non essendo ben documentato mi interessa poco cercarlo.

Validazione

La validazione in dooPhp è realizzata mediante la classe dooValidator. Il funzionamento è molto banale. Si passa un array con i dati da controllare e un array con le regole da applicare al metodo validate della classe. La classe è fornita di tanti metodi, il cui nome comincia con test, che viene omesso nelle regole, mediante i quali si possono effettuare la maggior parte dei controlli. Un appunto interessante riguarda la validazione dei dati di un model legati ad un database. Se questo è generato in automatico dal framework, verranno automaticamente create anche le regole della validazione. In tal caso basta invocare il metodo validate del model.

Ajax

Il framework in questione si dice pienamente compatibile con i più riconosciuti framework JavaScript, leggi jQuery, ma non esiste nell'intero pacchetto, nessuna classe che agevoli l'utente nella creazione di codice Ajax mediante classi scritte in Php. Diciamo che non è una cosa estremamente negativa ma ovviamente è opinabile. Molti vorrebbero questa funzionalità per avere tutto in un unico pacchetto. Personalmente ritengo che sia meglio dividere Php da JavaScript.

Caching

DooPhp prevede due sistemi di caching: uno per il frontend e uno definito come data cache. Il primo consente di mettere in cache il render di alcune pagine o solo parti di esse. Per quanto riguarda il data caching sfrutta moduli quali APC e MEMcache ampiamente riconosciuti.

Autenticazione

Scaricando dooPhp si scaricano alcune applicazioni di esempio. Una di esse riguarda proprio l'autenticazione degli utenti che si basa su ACL. In pratica in pochi click si ha già a disposizione un sistema di login con tanto di permessi. La struttura di base sfrutta due metodi distinti per archiviare le informazioni. Username e password, nonché il ruolo dell'utente, sono memorizzati all'interno di una tabella user. Il login viene quindi effettuato semplicemente utilizzando il model di base della classe user. La versione demo ha purtroppo la password in chiaro e il codice va modificato per poterlo mettere in produzione.

La nota dolente riguarda le autorizzazioni che sono inserite all'interno di un file di configurazione invece di essere in un database. Il file si chiama acl.conf.php e si trova ovviamente nella cartella configuration. Il controllo dell'utente viene effettuato ovviamente nei controller e, in particolare, nel metodo speciale beforeRun, il quale è invocato prima di tutti gli altri. In esso, mediante il metodo process della classe acl, si verifica se l'utente ha o non ha i permessi per accedere alla risorsa. Trovo che il sistema di controllo, fatto in un metodo che viene eseguito prima dell'azione richiamata, sia utile per la pulizia e la semplicità del codice.

Internazionalizzazione e localizzazione

Il framework è dotato di una classe che permette l'internazionalizzazione dell'applicazione creata. La guida sul sito non è molto di aiuto in questa circostanza. Nelle caratteristiche del framework è specificato che dooPhp consente l'internazionalizzazione ma che questa deve essere implementata estendendo i controller. Nel file demo il supporto multilingua è realizzato mediante la creazione di tante viste quante sono le lingue che si vogliono disporre. Sinceramente la cosa non mi convince del tutto. Aspettiamo la guida completa in quanto esiste una classe translate che dovrebbe svolgere questa operazione nel modo corretto. Tale classe infatti consente di caricare i dati sia da file .csv che da file .mo.

Supporto e guide

Rappresentano forse la nota dolente del framework. Cominciamo col precisare che la documentazione disponibile sul sito ufficiale è ovviamente in lingua inglese. Non è un problema per tutti ma lo è per parecchi. Va aggiunto anche che la guida definitiva, come la definiscono, non è del tutto esauriente. Sarò troppo esigente ma essendo un framework, e non un Cms, mi aspetto che la guida sia approfondita. Inoltre ho notato che la data di rilascio, rilevata dal blog, è Febbraio 2011. Quindi sono passati parecchi mesi senza che la guida sia stata completata. Il forum è decisamente frequentato ma, anche in questo caso, parliamo della versione inglese. Quello italiano è completamente deserto.

Ulteriori caratteristiche

Il framework ha due ulteriori caratteristiche che lo rendono interessante. La prima riguarda la gestione degli url. In pratica è possibile mappare, mediante il file di configurazione routes.conf, gli url affinché vengano rindirizzati ovunque si voglia. Una sorta di url rewriting interno. È presente, infine, una classe per la gestione delle immagini.

Guida ai Framework PHP

  • Articolo 1: dooPHP
  • Articolo 2: YII
  • Articolo 3: Symfony
  • Articolo 4: CodeIgniter
  • Articolo 5: Zend(in via di pubblicazione)
  • Articolo 6: Kohana (in via di pubblicazione)
  • Articolo 7: Akelos (in via di pubblicazione)
  • Articolo 8: CakePhp (in via di pubblicazione)

Indice di tutti gli articoli.

Ti consigliamo anche