} else {
 $theRow= $this->_nouvelles->fetchRow ( 'id=' . $id );
 $form->populate ( $theRow->toArray () ); 
La seconde et dernière étape est de compléter avec la mise-à-jour du modèle :
 unset($formData['submit']);
 $where= 'id = '. $id;
 $this->_nouvelles->update( $formData, $where );
 $this->_forward( 'index' );
Les données postées sont nettoyées des données non pertinentes au modèle (valeur du bouton 'submit'). On exécute ensuite la requête de mise-à-jour. Il faut garder à l'esprit que les données provenant des paramètres d'URL comme 'id' doivent être contrôlées pour éviter tous problèmes de sécurité.
La vue est la même que pour 'create', ainsi dans application/default/views/scripts/index/update.phtml :
<?php echo $this->form; ?>
Il faut par contre modifier la vue 'index' pour y ajouter une colonne 'modifier' dans les nœuds thead et tfoot :
<th>Modifier</th>
Dans le nœud codice_8 ce sera un lien vers l'objet avec son id en paramètre :
<td><a href="index/update/id/<?php echo $nouvelle->id; ?>">modif.</a></td>
Pour que le lien vers l'URI aboutisse il est souvent conseillé d'utiliser la balise 'Base' dans l'en-tête Html :
 <head>
 <base href="http://www.monblog.zf/">
Pour terminer ce tour d'horizon des actions de base, il reste l'action d'effacement : 'delete'.
L'action effacer (delete).
Cette action prend l'identifiant comme paramètre et se déroule en deux temps : au premier appel l'objet à effacer est affiché suivit d'un formulaire avec boutons pour confirmer ou non l'effacement.
Si l'utilisateur clique sur 'Non', il est redirigé vers l'action 'index' qui liste tous les enregistrement de l'objet courant.
Dans le cas de la confirmation, l'objet est effacé.
 if ( $this->_request->isPost () ) {
 if ( $this->_hasParam('Oui') ) { // on efface
 $where= 'avion_id = ' . $id; // id unique 
 $this->objet->delete ( $where );
 $this->view->message='Effacé(e)';
La première étape est de créer le formulaire de confirmation ainsi l'action delete peut s'écrire ainsi :
public function deleteAction()
 $id= (int) $this->_getParam('id');
 $confirmForm= new Zend_Form(); 
 $hid= new Zend_Form_Element_Hidden('id');
 $hid->setValue( $id );
 $hid->setLabel('Voulez-vous supprimer la nouvelle num. ' . $id . ' ?'); 
 $oui= new Zend_Form_Element_Submit('Oui');
 $oui->removeDecorator('DtDdWrapper');
 $non= new Zend_Form_Element_Submit('Non');
 $non->removeDecorator('DtDdWrapper');
 $confirmForm->addElements( array($hid, $oui, $non) );
 $this->view->confirmForm = $confirmForm;
 // à compléter ...
Ici le formulaire est programmé mais il aurait pu être tout autant créé directement en Html dans la vue. La vue s'en trouve d'ailleurs ici réduite au minimum :
<?php echo $this->confirmForm; ?>
On doit maintenant ajouter la logique d'effacement :
if ( $this->_request->isPost () )
 if ( $this->_hasParam('Oui') )
 { // on efface
 $where= 'id = ' . $id; // id unique 
 $this->_nouvelles->delete ( $where );
$this->_forward( 'index' ); 
} else {
 if ( $id > 0 ) {
$this->view->nouvelle= $this->_nouvelles->fetchRow ( 'id=' . $id )->toArray();
} //isPost()
Pour compléter, la vue on récapitule les attributs de la nouvelle. On copie/colle le code source de la vue 'read' à la suite du formulaire ce qui au final est :
<?php echo $this->confirmForm; ?>
<p>Nouvelle numero : <?php echo $this->nouvelle['id']; ?></p>
<ul><?php foreach ( $this->nouvelle as $cle => $valeur ) : ?> 
 <li><?php echo $cle . ' : ' . $valeur; ?></li> 
<?php endforeach; ?>
</ul>
Il faut comme cela l'a été pour 'update' modifier la vue 'index' pour y ajouter une colonne 'supprimer' dans les nœuds codice_9 et codice_10 :
<th>Supprimer</th>
Dans le nœud tbody ce sera un lien vers l'objet avec son id en paramètre :
<td><a href="index/delete/id/<?php echo $nouvelle->id; ?>">suppr.</a></td>
D'autres actions sont envisageables comme les actions d'effacement (deletelist) ou de modification de masse (updatelist) mais cela dépasse le cadre de ce tutoriel.

S'initier au Zend Framework/Mini blog/URL

Réécriture d'URL, SEO, Zend_Router..
Actuellement l'URI de lecture d'une nouvelle est en anglais et a des paramètres numériques :
Ceci a deux inconvénients, un moteur de recherche va par exemple mal indexer nos articles pour des recherches en français. L'utilisation d"'id" numériques est pratique mais n'a aucune valeur pour l'indexation. Les sites avec un rang d'indexation élevé ont des URI explicites comme :
La première étape est de tester une redirection d'URL plus simple comme :
Dans le Bootstrap il suffira d'ajouter (ou dans Initializer.php : initRoutes() ) :
 $routeur= $this->_front->getRouter();
 $routeur->addRoute( 'nouvelle',
 new Zend_Controller_Router_Route('nouvelle/:id',
 array( 'controller' => 'index',
 'action' => 'read' ) )
Avec $this->_front l'instance du Zend_Controller_Front. Qui est normalement déjà disponible si l'on a créé un projet ZF avec un EDI, sinon il faut rajouter :
$this->_front = Zend_Controller_Front::getInstance();
La nouvelle route étant créé nous pouvons modifier la vue de l'index pour rajouter un lien vers une nouvelle lorsque l'on clique sur le titre.
Dans le nœud tbody de la vue 'application/default/views/scripts/index/index.phtml' :
<tbody>
<?php foreach ( $this->nouvelles as $nouvelle ) : ?>
<tr><?php foreach ( $nouvelle->toArray () as $col ) : ?>
<td><a href="<?php echo $this->url( array('id' => $nouvelle->id), 'nouvelle' ) ?>"><?php echo $col; ?></a></td>
L'aide de vue (View Helper) Url() construit automatiquement l'URL réécrite, on peut ainsi changer ad nauseam.
La deuxième étape est de modifier cette route pour y intégrer le titre de la nouvelle. Le titre de la nouvelle est une phrase, il nous faut détecter cette phrase à l'aide de l'expression régulière.

S'initier au Zend Framework/Conclusion
Ce rapide tour d'horizon du cadriciel en utilisant l'exemple simple d'une gestion de nouvelle a montré les avantages de cette nouvelle méthode de programmation et la part grandissante des patrons de conceptions dans le développement web moderne.
Il est recommandé de consulter les livres traitant ces sujets en profondeur, de se familiariser avec la documentation officielle et d'établir une veille technologique par l'abonnement aux forums, blogs des développeurs.
Webographie.
Et aussi :

S'initier au Zend Framework/Mini blog
Exemple du mini blog..
Une première application après le traditionnel « Hello World! » est de créer un mini blog permettant d'afficher une liste de nouvelles, créer une nouvelle, effacer et la mettre à jour.
Ce premier objet Nouvelle a ainsi 4 actions : ajouter, voir, mettre à jour, effacer. Auxquelles on rajoute l'action voir tous les objets (index).
L'ébauche du contrôleur se présente :
public class IndexController extends Zend_Action_Controller
Pour chaque action il existe une vue : un tableau pour index, un formulaire pour ajouter et mettre-à-jour, un formulaire Oui/Non pour effacer.
Le modèle est implémenté par une table SQL nouvelle avec comme attributs (id, titre, corps, date).
La vue générée est un gabarit XHTML habillé par une feuille de style CSS.
Nouveau projet : monBlog.
Dans votre IDE, créez un nouveau projet nommé 'monBlog', l'arborescence de ce projet sera par exemple :
La bibliothèque fournit un script pour créer cette arborescence :
 /lien/vers/votre/ZendFramework-latest/bin/zf.sh create project monBlog
Ce script situé dans le dossier bin/ de la bibliothèque. Sur les systèmes Unix, Il peut être appelé ultérieurement via un alias à placer à la fin de votre ~/.bash_aliases :
 alias zf.sh='/lien/vers/votre/ZendFramework-latest/bin/zf.sh'