3.7.1 Introduzione

I Modelli sono usati nelle applicazioni CakePHP per l'accesso ai dati. Comunemente i modelli rappresentano una tabella di database, ma possono essere anche usati per accedere a file, record LDAP, eventi iCal o righe in un file CVS.

I Modelli possono essere anche associati tra loro, allo scopo di rendere l'accesso ai dati più facile. Se vi trovate nella condizione che ogni volta che eseguite una fetch di dati per mezzo del modello Recipe, dovete anche eseguirlo sulle entry di Author ed Ingredient, l'associazione di modelli vi può essere di aiuto.

Nuovi sono in CakePHP i DataSource ed i Behavior. I DataSource formano un base comune per i modelli CakePHP. Questo permette una maggiore integrazione dei modelli, inclusa l'associazione. I behavior del modello forniscono un sistema per aggiungere delle funzionalità. Specificare un behavior per i modelli vi fornisce un accesso ad una logica di manipolazione di cui potete avere bisogno: parliano di cose del tipo tree pruning, gestione degli upload ed altro.

Una classe di un modello pienamente funzionale, anche se piuttosto nuda, può somigliare a questa:

<?php

class Ingredient extends AppModel {
    var $name = 'Ingredient';
}

?>
  1. <?php
  2. class Ingredient extends AppModel {
  3. var $name = 'Ingredient';
  4. }
  5. ?>

Notate che i modelli CakePHP estendono una classe speciale AppModel: il genitore per tutti i modelli della vostra applicazione. Come AppController (ed AppHelper), questa classe speciale è il punto perfetto per inserire la logica condivisa da tutti i modelli dell'applicazione. La classe AppModel dovrebbe essere creata in /app/app_model.php e dovrebbe estendere la classe Model.

Soltanto con poche linee di codice, avete ottenuto pienamente le funzionalità CRUD (create, retrieve, update, delete). La maggior parte di questo è fornito dalla classe genitore dei modelli: Model. Una volta che avete un modello definito, potete utilizzarlo in un vostro controller. Segue un semplice esempio di come un modello ($this->Ingredient) può essere usato per ritrovare una lista di record Ingredient da gestire nella vista:

<?php

class IngredientsController extends AppController {

    function index() {
        //Hand a list of all ingredients to the view:
        $this->set(
            'ingredients',
            $this->Ingredient->findAll()
        );
    }
}

?>
  1. <?php
  2. class IngredientsController extends AppController {
  3. function index() {
  4. //Hand a list of all ingredients to the view:
  5. $this->set(
  6. 'ingredients',
  7. $this->Ingredient->findAll()
  8. );
  9. }
  10. }
  11. ?>

Utilizzare i modelli per ritrovare e salvare i dati può risparmiarvi molti mal di testa. I modelli di CakePHP forniscono un percorso standard e centralizzato per memorizzare i vostri dati, ma allo stesso tempo forniscono un livello di sicurezza per la vostra applicazione.

Le classi dei modelli possono essere espanse per includere un numero di attributi e motodi che aumentano le loro funzionalità. Questi attributi e metodi verranno spiegati di seguito.