Zend Framework Tutorial - 3

insertUpdateNews

Questo metodo si occupa sia dell'inserimento di una nuova news nel database, sia dell'aggiornamento di una news precedentemente creata. Nonostante le poche righe di codice che lo compongono, diverse sono le osservazioni che si possono fare. Per prima cosa si può notare che se si verifica l'assenza di uno dei dati obbligatori che costituisce la news ($autore, $titolo, $testoIntro) il metodo solleva un'eccezione di tipo Zend_Exception, passando un messaggio esplicativo. L'utilità di questo approccio risulterà più evidente quando vedremo il funzionamento del Controller che si occupa di inserire e modificare le news. Per adesso ci basta sapere che se viene sollevata una eccezione l'esecuzione del metodo viene interrotta e il flusso del programma ritorna al chiamante (il Controller) il quale provvede a mostrare il messaggio di errore all'utente.

Se invece tutti i controlli vanno a buon fine viene costruito un array associativo $dati contenente le coppie nome_campo=>valore che stanno per essere inserite nel database. Per capire se si tratta di un inserimento o un aggiornamento viene verificato il valore del parametro $newsId.

Se presente si tratta di un aggiornamento, quindi viene richiamato il metodo $db->update() che accetta 3 parametri: il nome della tabella nella quale effettuare l'update, i dati da aggiornare e una stringa contenente la clausola WHERE dell'SQL per individuare le righe che saranno coinvolte dall'aggiornamento. Nel nostro caso vogliamo aggiornare solo il record con news_id pari a $newsId.

Se invece si tratta di un inserimento allora viene richiamato il metodo $db->insert() a cui viene passato il nome della tabella nella quale effettuare l'inserimento ed i dati da inserire.

public function insertUpdateNews($newsId, $autore, $titolo, $testoIntro, $testoCompleto)
{
    $db = Zend_Registry::get('db');

    $autore     = trim($autore);
    $titolo     = trim($titolo);
    $testoIntro = trim($testoIntro);

    if(!$autore) {
        throw new Zend_Exception("Non hai inserito il nome dell'autore");
    }
    if(!$titolo) {
        throw new Zend_Exception("Non hai inserito il titolo");
    }
    if(!$testoIntro) {
        throw new Zend_Exception("Il testo introduttivo è obbligatorio");
    }

    $dati = array(
    'autore'         => $autore,
    'data'           => time(),
    'titolo'         => $titolo,
    'testo_intro'    => $testoIntro,
    'testo_completo' => $testoCompleto);

    if($newsId) {
        $where = "news_id = " . (int)$newsId;
        return $db->update('news', $dati, $where);
    } else {
        return $db->insert('news', $dati);
    }
}

1 commento

1 Marco MiPnamic sabato 5 giugno 2010, ore 16:43
ma non viene spiegato come integrare il Model
Effettua l'accesso o registrati per inserire un commento