Vogliamo realizzare un sito nel quale l'utente può vedere l'elenco delle news registrate, inserirne di nuove, modificare e leggere il testo completo di una notizia.
Lo Zend Framework ci suggerisce di raggruppare tali funzionalità in modo da avere degli insiemi di "azioni" correlate. Nel nostro caso avremo l'insieme delle azioni che è possibile effettuare sulle notizie (visualizzazione, inserimento, modifica e cancellazione). In situazioni più complesse avremo sicuramente molti insiemi di funzionalità (gestione utente, gestione download/upload file, gestione archivio news, gestione commenti, ecc.).
Per ciascun insieme di azioni dobbiamo creare una classe che deve implementare la logica di funzionamento delle singole funzionalità, ma non si deve occupare dell'interfaccia grafica (non deve contenere HTML) e non deve effettuare direttamente l'accesso ai dati necessari alla realizzazioni delle funzionalità (niente query quindi). Questa tipologia di classe costituisce il Controller citato nella pagina precedente e deve contenere un metodo (una funzione) per ciascuna azione di cui è responsabile. Nel nostro caso la classe che funge da Controller nelle notizie avrà 4 metodi: uno per la lettura di una singola notizia, uno per l'inserimento, uno per la modifica ed uno per la cancellazione di una notizia.
Riepilogando, le singole funzionalità (dette "Action") del nostro sito web devono essere raggruppate in insiemi correlati e per ciascun insieme deve essere realizzata una classe (il Controller) che possiede un metodo per ogni Action da implementare.
Accanto ai Controller necessari al funzionamento della nostra applicazione, individuati dall'analisi che abbiamo appena fatto, due ulteriori Controller devono essere sempre realizzati per gestire delle operazioni speciali. Un Controller di nome IndexController si deve occupare di realizzare la home page del sito attraverso un metodo di nome indexAction , infatti la home page è una funzionalità presente in tutti i siti. Nel nostro caso questo Controller mostrerà l'elenco delle news presenti nel database (ecco perché non abbiamo considerato tale funzionalità nel controler delle news!). Un secondo Controller di nome ErrorController invece deve gestisce le pagine di errore attraverso un metodo di nome errorAction, automaticamente interpellato dal framework ad esempio quando l'utente tenta di accedere ad una pagina inesistente, ovvero ad una "Action" non implementata dal nostro sito. Vedremo i dettagli di questi 2 Controller quando mostreremo il codice del progetto.
L'IndexController può implementare anche altre Action per cui si potrebbe realizzare un sito web anche solo con questo Controller e con l'ErrorController. A dire il vero anche l'ErrorController potrebbe non essere realizzato, ma così facendo in caso di errore otterremo delle sgradevoli segnalazioni, simili ai fatal error di PHP.
L'HTML necessario a ciascuna Action non deve trovarsi nel Controller ma in file separati, detti template. Tali file possono contenere codice PHP ma è buona norma che questo serva solo alla visualizzazione dei contenuti dinamici. Ciascuno di questi file è in generale associato ad una particolare Action e in questi casi lo Zend Framework, grazie ad alcune convenzioni sui nomi che vedremo in seguito, è in grado di individuarlo ed utilizzarlo automaticamente in base alla funzionalità richiesta dall'utente. L'esecuzione di questi file avviene all'interno della classe che realizza la View e che, al contrario dei Controller, non dobbiamo creare noi perché già presente nel framework. Analizzando il codice vedremo come la View offre molte funzionalità che ci semplificheranno il compito di realizzare i template HTML.
Infine l'accesso ai dati, come premesso, non deve essere eseguito ne dal Controller ne dalla View, ma deve essere effettuato da classi specializzate dette Model. In questo tutorial per realizzare i Model useremo un approccio molto simile a quello di una comune applicazione web PHP/MySQL, ovvero attraverso delle query dirette sul database, ma è importante sapere che lo Zend Framework offre potenti alternative che però aggiungerebbero complessità a questo tutorial. Realizzeremo quindi una classe con diversi metodi necessari ad effettuare le operazioni sul database: lettura, inserimento ed aggiornamento delle news. Lo Zend Framework in questo caso non dà indicazione su come organizzare la classe.