La Action per la modifica di una news precedentemente inserita dall'utente ha una struttura molto simile a quella per l'inserimento vista nella precedente pagina. La principale differenza consiste nel fatto che se la pagina viene mostrata per la prima volta non basta caricare il template del form di inserimento/modifica ma bisogna anche recuperare i dati della news dal database e passarli al template. Queste operazioni vengono realizzate alla fine dello script, nel blocco "else" (righe 34-38). Si noti come anche in questo caso viene effettuato un controllo sulla news recuperata dal database. Infatti poiché l'id della news proviene dall'utente, questo potrebbe esser manomesso e quindi non associato ad una news realmente presente nel database. In questo caso viene sollevata una eccezzione che si traduce, come visto nella viewAction, in un messaggio di pagina non trovata.
public function editAction()
{
$this->view->titoloPagina = 'Modifica news';
// Utilizza il template 'news/news-form.phtml' al posto di 'news/edit.phtml'
$this->_helper->viewRenderer->setScriptAction('news-form');
$news = new News;
$request = $this->getRequest();
$newsId = $request->getParam('id');
if($request->isPost())
{
$autore = $request->getPost('autore');
$titolo = $request->getPost('titolo');
$testoIntro = $request->getPost('testo_intro');
$testoCompleto = $request->getPost('testo_completo');
try {
$news->insertUpdateNews($newsId,$autore,$titolo,$testoIntro,$testoCompleto);
$this->_flashMessenger->addMessage("News '$titolo' modificata con successo");
$this->_redirect('/');
} catch (Zend_Exception $e) {
$this->view->errorMsg = $e->getMessage();
$this->view->news = array($autore,$titolo,$testoIntro,$testoCompleto);
$this->view->news = array('autore' => $autore,
'titolo' => $titolo,
'testo_intro' => $testoIntro,
'testoCompleto' => $testoCompleto);
}
}
else
{
$news = $news->getNewsById($newsId);
if(!$news) {
throw new Zend_Controller_Action_Exception;
}
$this->view->news = $news;
}
}