Modificare un album
La modifica di un album è quasi identica all’inserimento, il codice è molto simile:
zf-tutorial/application/controllers/IndexController.php
...
function editAction()
{
$form = new Application_Form_Album();
$form->submit->setLabel('Save');
$this->view->form = $form;
if ($this->getRequest()->isPost()) {
$formData = $this->getRequest()->getPost();
if ($form->isValid($formData)) {
$id = (int)$form->getValue('id');
$artist = $form->getValue('artist');
$title = $form->getValue('title');
$albums = new Application_Model_DbTable_Albums();
$albums->updateAlbum($id, $artist, $title);
$this->_helper->redirector('index');
} else {
$form->populate($formData);
}
} else {
$id = $this->_getParam('id', 0);
if ($id > 0) {
$albums = new Application_Model_DbTable_Albums();
$form->populate($albums->getAlbum($id));
}
}
}
...
Vediamo le differenze rispetto all’inserimento di un album. Prima di tutto, quando si visualizza il form all’utente abbiamo bisogno di recuperare il titolo e l’artista dell’album dal database per poi popolare gli elementi del form con questi dati. Ciò avviene alla fine del metodo:
$id = $this->_getParam('id', 0);
if ($id > 0) {
$albums = new Application_Model_DbTable_Albums();
$form->populate($albums->getAlbum($id));
}
Notiamo che ciò viene eseguito se non c’è stata una richiesta via POST, dato che il POST implica che è stato riempito il form e che lo si vuole processare. Per la visualizzazione iniziale del form, recuperiamo l’id dalla request usanto il metodo _getParam(). Poi usiamo il model per recuperare la riga corrispondente nel database e popolare direttamente il form con i dati. (Adesso sarà chiaro perchè il metodo getAlbum() nel model restituisce un array!)
Dopo aver validato il form, abbiamo bisogno di salvare i dati nel record corretto del database. Lo facciamo usando il nostro metodo updateAlbum() del model:
$id = $form->getValue('id');
$artist = $form->getValue('artist');
$title = $form->getValue('title');
$albums = new Application_Model_DbTable_Albums();
$albums->updateAlbum($id, $artist, $title);
Il template dello script di view è lo stesso di add.phtml:
zf-tutorial/application/views/scripts/index/edit.phtml
<?php
$this->title = "Edit album";
$this->headTitle($this->title);
echo $this->form ;
?>
Adesso dovremmo essere in grado di modificare gli album.