Elenco degli album

di Rob Allen

Ora che si è impostata la configurazione, le informazioni per il database e lo scheletro delle viste, possiamo entrare nel cuore dell'applicazione e visualizzare gli album. Ciò avviene nella classe IndexController ed inizieremo con il visualizzare gli album in una tabella con il metodo indexAction():

zf-tutorial/application/controllers/IndexController.php

...
function indexAction()
{
    $albums = new Application_Model_DbTable_Albums();
    $this->view->albums = $albums->fetchAll();
}
...

Istanziamo il nostro model basato sul pattern "table data gateway". Il metodo fetchAll() restituisce un oggetto Zend_Db_Table_Rowset che ci permetterà di ciclare sulle righe ottenute all'interno dello script view dell'action.

Possiamo ora completare lo script view associato: index.phtml:

zf-tutorial/application/views/scripts/index/index.phtml

<?php
    $this->title = "My Albums";
    $this->headTitle($this->title);
?>
<p><a href="<?php echo $this->url(array('controller'=>'index',
    'action'=>'add'));?>">Add new album</a></p>
<table>
<tr>
    <th>Title</th>
    <th>Artist</th>
    <th>&nbsp;</th>
</tr>
<?php foreach($this->albums as $album) : ?>
<tr>
    <td><?php echo $this->escape($album->title);?></td>
    <td><?php echo $this->escape($album->artist);?></td>
    <td>
    <a href="<?php echo $this->url(array('controller'=>'index',
        'action'=>'edit', 'id'=>$album->id));?>">Edit</a>
    <a href="<?php echo $this->url(array('controller'=>'index',
        'action'=>'delete', 'id'=>$album->id));?>">Delete</a>
    </td>
</tr>
<?php endforeach; ?>
</table>

La prima cosa che facciamo è impostare il titolo della pagina (usato nel layout) ed impostare il titolo per la sezione <head>, usando il view helper headTitle(), che verrà mostrato nella barra del titolo del browser. Creiamo poi un link per aggiungere un nuovo album. Il view helper url() fornito dal framework ci aiuta a creare i link con il corretto URL. Basta passergli in input un array di parametri e lui farà il resto.

Poi creiamo una tabella html in cui visualizzare per ciascun album il titolo, gli artisti ed i link per la modifica e cancellazione del record. Usiamo un classico ciclo foreach per iterare sulla lista degli album, impiegando la sintassi alternativa che fa uso del due punti e dell'endforeach, più semplice da leggere rispetto alle parentesi graffe. Ancora una volta usiamo il view helper url() per creare i link di modifica e cancellazione.

Se si apre http://localhost/zf-tutorial/public/ si dovrebbe adesso vedere un elenco di album, qualcosa del genere:

Elenco degli album

8 commenti

1 Francesco Francesco martedì 1 febbraio 2011, ore 11:03
Questa riga è sbagliata:
$this->view->albums = $albums->fetchAll();
Così è corretta
$this->albums = $albums->fetchAll();
2 wd wd domenica 13 febbraio 2011, ore 19:22
perché ?
3 ehijon mercoledì 21 dicembre 2011, ore 18:51
Non capisco cosa fa fetchAll() in questa riga...

$this->view->albums = $album->fetchAll();

cosa viene passato e dove risiede la variabile "albums" nella riga $this->view->albums ?

immagino "prenda tutti gli album", ma erchè non usa la funzione editAction della stessa classe?

grazie... :)
4 ehijon mercoledì 21 dicembre 2011, ore 18:53
nell'ultima domanda volevo scrivere: perchè non usa la funzione "getAlbum()" del models Albums.php ?
5 Gianni Tomasicchio mercoledì 21 dicembre 2011, ore 21:31
Il metodo getAlbum($id) della classe Application_Model_DbTable_Albums serve per leggere i dettagli di un singolo album.
Il metodo fetchAll() invece è ereditato dalla classe Zend_Db_Table_Abstract e serve a leggere tutti gli album.
6 ehijon mercoledì 21 dicembre 2011, ore 22:21
Grazie Gianni della risposta! ho capito questo aspetto. mi rimangono le idee ancora un po confuse sul quadro generale mvc.. spero si risolvano con l'esercizio ;) ciao
7 claudiog74 giovedì 19 settembre 2013, ore 15:33
Oh, finalmente un tutorial ben fatto, in Italiano, per imparare le basi di Zend Framework! Grazie e complimenti!
8 acc.ess56 martedì 14 aprile 2015, ore 17:51
Arrivato a questo punto, non mi funziona più:
Se in IndexController.php sostituisco la function indexAction() con il corpo su indicato:
{
$albums = new Application_Model_DbTable_Albums();
$this->view->albums = $albums->fetchAll();
}

quando cerco di caricare:
http://localhost/zf-tutorial/public/

ottengo come errore:
Fatal error: Class 'Application_Model_DbTable_Albums' not found in C:\xampp\htdocs\zf-tutorial\application\controllers\IndexController.php on line 30

dove, alla line 30 ho:

$albums = new Application_Model_DbTable_Albums();

Perchè?
Effettua l'accesso o registrati per inserire un commento