standardLib: un aiuto concreto nello sviluppo di applicazioni web
E’ con grande piacere che alcuni giorni fa ho potuto annunciare il rilascio di standardLib 0.8 beta 2, il framework PHP utile nello sviluppo di applicazioni web. Non voglio dilungarmi eccessivamente in questioni tecniche ma piuttosto descriverne le qualità, nella convinzione che potrà tornarti utile e farti risparmiare molto tempo.
standardLib; cos’è e come nasce?
Per molti anni ho avuto l’abitudine di condividere le librerie PHP da me sviluppate, o meglio quelle che reputavo le più interessanti.
Dal numero di download ho potuto constatare come queste librerie venivano apprezzate.
Tempo fa ho deciso che avrei dovuto mettere un po’ di ordine in quell’ammasso di codici; non a caso il repository che li ospitava aveva l’azzeccato nome mtx.babilonia.
Mi sono detto:
- Inizia a riscrivere tutto con una sintassi PHP 5
- ripulisci e semplifica le classi
- rendi tutto più coerente e strutturato
- verifica se non vi sia modo di far interagire queste classi
Mentre facevo questo mi sono detto: Perchè non farne un framework? Perchè non portare il tutto (parlo di operazioni complesse) ad un alto livello di astrazione e di automazione e fornire all’utilizzatore delle semplici interfacce?
Da questa idea nasce standardLib che fornisce dei semplici modelli per svolgere le più comuni operazioni (che in realtà sono complesse) utilizzate nello sviluppo di applicazioni web.
In concreto cosa offre standardLib?
Vediamo brevemente i modelli offerti da questo framework:
Modelli
- addUser: Questo modello implementa il processo di registrazione utente (con tanto di email di attivazione, gestione degli errori e della sicurezza) con 6 righe di codice e moltissimi parametri personalizzabili.
- Authentication: Questo modello provvede alla verifica dei dati di login ed a proteggere le aree riservate; in opzione può integrare automaticamente il modello bruteForcePrevention il quale è in grado di bloccare il processo di login dopo una serie di x tentativi consecutivi falliti.
- bruteForcePrevention: Questo modello è in grado di evitare attacchi “brute force” bloccando la possibilità di eseguire il login per un determinato tempo ad un indirizzo ip che ha già fallito un certo numero di tentativi.
- Mailer: E’ in grado di inviare email dal sito basati su un template html personalizzabile.
- Pagination: E’ in grado di paginare i risultati di una query creando i link (precedente, successivo, primo, ultimo) e l’indice delle pagine in 7 righe di codice!
- passwordReset: Questo modello implementa la funzione “password dimenticata” creando una nuova password casuale che invierà per email e gestendo gli errori e la sicurezza in cinque righe di codice.
- Search: Implementa un modulo di ricerca altamente configurabile in 3 righe di codice. Opzionalmente può integrare automaticamente il modello Pagination che provvederà a paginare i risultati della ricerca.
- Security: Offre una serie di interfacce per la gestione della sicurezza.
- sLinfo: Manda in output i dati dell’installazione corrente di standardLib (un po’ come phpinfo())
- standardTools: Contiente alcune utility come ad esempio un generatore di stringhe casuali, un normalizzatore di stringhe, ecc…
- Upload: Con una riga di codice è in grado di gestire l’intero processo di upload e gli aspetti di sicurezza ad esso legati.
- UploadToDb: Un estensione di Upload in grado di salvare il file nel database in formato binario
- forceDownload: Modello che permette di forzare il download di un file tenendo conto della sicurezza.
Widget
standardLib ha intenzione anche di offrire numerosi widget grafici. Per il momento ne dispone di uno soltanto:
- Wysiwyg: In grado di generare un wysiwyg con quattro semplici comandi.
Plugin
Come ogni framework che si rispetti, standardLib è facilmente estendibile realizzando dei plugin.
Non sei ancora convinto? Vuoi vedere qualche esempio?
Esempi pratici di utilizzo
A questo punto devo dirlo, un po’ di ispirazione l’ho presa da jQuery e presto ne avrai un’ulteriore conferma.
Se vuoi testare questi esempi, dovrai scaricare standardLib. Una volta scaricato dovrai decomprimerlo e procedere alla configurazione del file config.php.
Esempio 1: Upload di immagini
Vediamo come procedere nel caso in cui volessi permettere l’upload di immagini (non superiori ai 100Kb) nella cartella images/upload.
In primo luogo dovrò creare il form che punta alla pagina upload.php.
<form action="upload.php" method="POST" enctype="multipart/form-data"> <input name="upfile" value="" type="file"> <input value="upload" type="submit"> </form>
Ora il file upload.php dovrà innanzitutto includere il file engine.php che si trova nella cartella principale di standardLib.
include_once 'standardLib/engine.php';
L’inclusione di engine.php determina:
- L’inizializzazione della connessione al database (se prevista).
- L’inizializzazione della sessione.
- La localizzazione delle date.
- E soprattutto la creazione dell’oggetto model che in pratica è la chiave di accesso al framework (un po’ come $ per jQuery).
A questo punto non dovremo fare altro che inizializzare il modello passando i parametri necessari:
$model->Upload("name:upfile, SavePath: images/upload, size:102400, extensions:gif+png+jpg”);
Facile vero?
Puoi trovare la lista completa dei parametri nella documentazione del modello Upload.
Una volta terminato il processo, il modello Upload mette a disposizione due proprietà:
- errorReport: conterrà la descrizione dell’eventuale errore oppure FALSE se il processo è andato a buon fine. I messaggi di errore e di informazione di tutti i modelli sono personalizzabili e si trovano nel file di linguaggio (language/it.php).
- filename: Che conterrà il nome con il quale è stato salvato il file. Nota che di defualt il file viene rinominato con una stringa casuale, qualora si desiderasse mantenere il nome file originale bisognerà passare il parametro rename con valore impostato a 0 (rename:0).
Vediamo come possiamo utilizzare queste proprietà in modo corretto:
if($model->Upload->errorReport) { echo $model->Upload->errorReport; } else { echo "File caricato correttamente con il nome: " . $model->Upload->filename; }
Puoi divertirti con questo script sulla pagina di esempio.
Vediamo un altro esempio?
Esempio 2: Come permettere la registrazione di utenti?
Iniziamo dalla pagina che conterrà il form:
<form action="register.php" method="POST"> username<br /> <input name="username" type="text"><br /><br /> password<br /> <input name="password" type="password"><br /><br /> password ripeti<br /> <input name="password2" type="password"><br /><br /> email<br /> <input name="email" type="text"><br /><br /> <input value="invia" type="submit"> </form>
e dunque la semplicissima pagina register.php alla quale il form punterà.
include_once 'standardLib/engine.php'; $model->addUser(); if($model->addUser->_errors()) { echo $model->addUser->errorReport; } else { $model->addUser->insertNewUser(); echo "utente inserito"; }
Cosa abbiamo fatto?
- Abbiamo incluso engine.php.
- Inizializzato il modello addUser (senza parametri, possiamo impostare i parametri di default in config.php).
- In seguito valutiamo il metodo _errors() che controlla molte cose (se le due password corrispondono, se l’indirizzo e-mail è valido, se l’e-mail e l’username esistono già nel database, e tante altre cose).
- Se _errors() restituisce TRUE, c’è qualcosa che non va, e per sapere cosa basta stampare errorReport.
- Se invece non ci sono problemi possiamo eseguire il metodo insertNewUser() che provvederà all’inserimento provvisorio dell’utente nel database ed all’invio dell’email di attivazione.
Se pensi che tutto questo processo (controllo errori, inserimento, email di verifica) è gestibile in 5-6 righe di codice, puoi immaginare il tempo risparmiato in fase di sviluppo.
Conclusione
In questo articolo abbiamo dato un breve sguardo al framework standardLib. Non era mia intenzione approfondire ed entrare nei dettagli ma semplicemente dare un’idea delle potenzialità offerte nello sviluppo di software per il web.
Tengo anche a sottolineare che standardLib non ha nessuna pretesa di competere con altri framework; come ho detto nell’introduzione ho tentato di generalizzare le operazioni che più comunemente siamo chiamati ad implementare sui siti che realizziamo.
Ho comunque una road map e delle idee per migliorare costantemente questo prodotto.
E tu, cosa ne pensi? Credi che potrebbe tornarti utile? Vuoi entrare nel team di sviluppo?
16 commenti
Trackback e pingback
[...] This post was mentioned on Twitter by yesWEBcan, mtx_maurizio. mtx_maurizio said: RT @YIW standardLib: un aiuto concreto nello sviluppo…