PHP  »  Articoli  »  Zend Framework 

Introduzione allo Zend Framework per Php 5: il modulo Zend_Controller

di: Gabriele Farina     01 Giugno 2006

ImmagineGuida completa a Zend Framework
Leggila su HTML.it

Recentemente la Zend, società che supporta a livello enterprise lo sviluppo e la distribuzione di Php, ha introdotto una serie di interessanti novità tra i propri prodotti. Tra queste non possiamo rimanere indifferenti al rilascio, ancora in versione beta, di un framework ad oggetti per Php 5 che fornisce una serie di librerie e funzionalità di tutto rispetto che vanno a colmare la maggior parte delle lacune che si possono riscontrare nella libreria standard fornita con Php.

Il framework sviluppato dalla Zend, chiamato per l'appunto Zend Framework, è ben documentato e presenta moltissime funzionalità interessanti per velocizzare lo sviluppo delle proprie applicazioni. Tra queste possiamo citare un'implementazione di Lucene (il famosa libreria di ricerca ed indicizzazione sviluppata in Java dall'Apache Software Foundation) in Php, una completa libreria per la lettura e la scrittura di documenti Pdf, una serie di funzionalità per lo sviluppo di siti internet basandosi sul pattern MVC (Model-View-Control, che in questo periodo è diventato/ritornato il cavallo di battaglia di molti sviluppatori, forse anche grazie alla nascita di Ruby on Rails) e un'interfaccia ad oggetti per l'accesso ai database.

In questo articolo introdurrò il modulo Zend_Controller, che, come accennato precedentemente, si compone di una serie di classi e funzioni per facilitare l'implementazione di siti internet o applicazioni web basate sul pattern MVC. Per informazioni specifiche sulla configurazione e l'installazione del framework rimando alla documentazione ufficiale.

Struttura e funzionamento del modulo Zend_Controller

Prima di vedere qualcosa di pratico è interessante analizzare come gli sviluppatori dello Zend Framework hanno deciso di implementare questo modulo e come il modulo stesso si comporta; è bene ricordare che il modulo Zend_Controller è stato pensato per essere leggero, modulare e flessibile e non fornisce una soluzione completa come potrebbero farlo TurboGears per Python o Symphony per Php.

Il funzionamento logico viene guidato da una serie di classi:

  • Zend_Controller_Front: è un'implementazione del pattern FrontController che si occupa di intercettare tutte le richieste fatte al server e di delegarle agli Zend_Controller_Action;

  • Zend_Controller_Action: è la classe base che rappresenta un Controller. Ogni controller infatti estende questa classe e fornisce una serie di metodi che verranno esposti al sistema per l'esecuzione quando richiesti;

  • Zend_Controller_Router: è la classe che viene utilizzata per trasformare una richiesta URL in un oggetto Zend_Controller_Dispatcher_Token. Questo oggetto contiene informazioni sul nome del controller richiesto, sul nome dell'azione che si dovrebbe eseguire e la serie di parametri inviati durante la richiesta. I parametri sono estratti, come vedremo in seguito, anche dall'URL stesso.

  • Zend_Controller_Dispatcher: riceve il risultato del processo di routing e si occupa di trovare e caricare il file fisico che implementa il controller richesto, istanziare l'implementazione della classe Zend_Controller_Action (che deve essere fornita obbligatoriamente) e richiamare il metodo richiesto. Alla fine di questo processo il controllo ritorna allo Zend_Controller_Front che si occupa di richiamare nuovamente il dispatcher nel caso in cui il controller eseguito abbia richiesto l'esecuzione di altri metodi.

Il processo è lineare e facilmente implementabile in altri linguaggi o framework già esistenti. La cosa interessante è che il sistema stesso si integra con lo Zend Framework lavorando utilizzando le eccezioni (differentemente dalle implementazioni native di altre librerie che si basano ancora sull'ormai obsoleto sistema di notifica degli errori) e tutte quelle funzionalità introdotte con il miglioramento del modello ad oggetti e della SPL (Standard Php Library), con il risultato che finalmente si ha a disposizione uno strumento che potrebbe invogliare la comunità Php e gli hoster stessi ad aggiornare i propri piani verso qualcosa di più recente rispetto alle soluzioni obsolete ancora utilizzate.

Lo Zend_Controller_Router implementa un sistema molto semplice per estrarre le informazioni da inviare al dispacther dagli URL. Nelle prossime versioni il sistema verrà aggiornato per dare un po' più di flessibilità rispetto a quello attuale, che invece risulta poco flessibile e molto semplice. Le informazioni da un URL sono estratte interpretando l'URL nel modo seguente: http://host/controller/action/key1/value1/key2/value2/...

Il primo token è l'host verso cui viene effettuata la richiesta, segue il nome del controller, il nome dell'azione ed una serie di coppie chiave valore opzionali che verranno utilizzate come parametri per l'azione. Sia il controller sia l'azione stessa sono opzionali. Se l'azione non viene specificata viene richiamata in automatico l'azione index del controller specificato. Nel caso in cui invece il controller non fosse specificato, viene richiamata l'azione index del controller index.

L'idea dietro a questo approccio è quella di supportare URL puliti senza query string; al fine di gestire correttamente il sistema à necessario quindi avere a disposizione un server web che fornisca sistemi di riscrittura degli URL al fine di indirizzare tutte le chiamate ad un'unica pagina Php (index.php) che istanzierà le componenti necessarie per la corretta interpretazione dell'URL. Php normalmente viene eseguito con Apache, e questo webserver fornisce un modulo opzionale, chiamato mod_rewrite, che supporta la riscrittura degli URL.

Per far funzionare correttamente il modulo su Apache è necessario inserire nella root del webserver un file index.php che esponga le funzionalità dello Zend_Controller ed un file .htaccess contenente delle regole che reindirizzino tutte le richieste che potrebbero corrispondere a chiamate verso dei controller al file index.php; questa soluzione può essere archiviata utilizzando un approccio che reindirizzi tutte le chiamate eccetto quelle fatte a file statici:

RewriteEngine    On
RewriteRule    !\.(js|ico|gif|png|jpg|css)$    index.php

Guide PHP

Guida Yii Framework

Come creare applicazioni Web in modo semplice e veloce con il...

Guida Zend Framework

Diventate professionisti dello sviluppo Web. Zend Framework è lo...

Guida Applicazioni Facebook con PHP

Come realizzare un'applicazione per Facebook. Dalle basi della...

Altre guide

Newsletter @PHP

Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso PHP per Webmaster

11 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti