Login
Libri
Home Argomenti Generali Model

Model

Share

I modelli sono disponibili opzionalmente per tutti coloro che vogliono utilizzare un approccio più tradizionale al paradigma MVC.

Che cosa è Model?

I Models sono classi PHP disegnate per lavorare con le informazioni provenienti dal proprio database. Per esempio, se si utilizza CodeIgniter per gestire un blog. Si dovrà avere una classe model che contiene le funzioni per inserire, aggiornare, recuperare i dati del proprio blog. Di seguito un esempio di come dovrebbe essere una classe model:

class Blogmodel extends Model {

var $title   = '';
var $content = '';
var $date    = '';

function Blogmodel()
{
// Call the Model constructor
parent::Model();
}

function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}

function insert_entry()
{
$this->title   = $_POST['title']; // please read the below note
$this->content = $_POST['content'];
$this->date    = time();

$this->db->insert('entries', $this);
}

function update_entry()
{
$this->title   = $_POST['title'];
$this->content = $_POST['content'];
$this->date    = time();

$this->db->update('entries', $this, array('id' => $_POST['id']));
}

}

Nota: Le funzioni dell'esempio precedente utilizzano le funzioni Active Record per i database.

Nota: Per semplicità, nell'esempio, abbiamo utilizzato direttamente $_POST. Generalmente questo non è consigliabile, un approccio più corretto è quello che prevede l'utilizzo della classe Input Class $this->input->post('title')

Anatomia di un Model

Le classi model sono salvate nella cartella application/models/ . Possono essere annidate all'interno di sotto cartelle, se si desidera questo tipo di organizzazione.

Il prototipo base di una classe model è:

class Model_name extends Model {

function Model_name()
{
parent::Model();
}
}

Dove Model_name sta ad indicare il nome della tua classe. Il nome della classe deve avere la prima lettere maiuscola ed il resto del nome in minuscolo. Accertiamci sempre che la nostra classe estenda la classe Model base.

Il nome del file sarà una versione in minuscolo del nome della classe. Per esempio, se si ha questa classe:

class User_model extends Model {

function User_model()
{
parent::Model();
}
}

Il file che la contiene sarà:

application/model/user_model.php

Caricare un Model

I tuoi model normalmente saranno richiamati all'interno di delle funzioni nel controller. Per caricare un model sarà necessario utilizzare la seguente funzione:

$this->load->model('Model_name');

Se il tuo model si trova in una sotto cartella, sarà necessario includer il path. Per esempio, se si è salvato un model nella cartella application/models/blog/queries.php si potrà richiamare usando:

$this->load->model('blog/queries');

 

Una volta caricato il model, sarà possibile accedere alle sue funzioni utilizzando un oggetto con lo stesso nome della classe Model:

$this->load->model('Model_name');

$this->Model_name->function();

Se si vuole assegnare un nome diverso all'oggetto model è possibile specificarlo come secondo parametro nella funzione di caricamento:

$this->load->model('Model_name', 'fubar');

$this->fubar->function();

Di seguito un esempio di un controller che carica un model, dal quale ricava dati, che passa ad una vista:

class Blog_controller extends Controller {

function blog()
{
$this->load->model('Blog');

$data['query'] = $this->Blog->get_last_ten_entries();

$this->load->view('blog', $data);
}
}

Auto-caricamento dei Models

Se si ha necessità di un particolare model a livello globale, nella propria applicazione, è possibile dire a CodeIgniter di caricarlo automaticamente all'inizializzazione del sistema. Questo sarà possibile aprendo il file application/config/autoload.php file e aggiungendo il model nell'array di auto-caricamento.

Connettersi al proprio Database

Quando un model è caricato, questo NON si connette automaticamente al proprio database. Per la connessione sono disponibili le seguenti opzioni:

  • E' possibile connettersi utilizzando il metodo standard descritto qui, o all'interno della classe Controller o all'interno della classe Model.
  • E' possinile dire al Model di collegarsi automaticamente al momento del caricamente passandogli come terso parametro TRUE (boolean), utilizzando i settaggi definiti nel config file:

    $this->load->model('<var>Model_name</var>', '', <kbd>TRUE</kbd>);

  • E' poi possibile passare i dati per la connessione come terzo parametro:
  • $config['hostname'] = "localhost";
     $config['username'] = "myusername";
     $config['password'] = "mypassword";
     $config['database'] = "mydatabase";
     $config['dbdriver'] = "mysql";
     $config['dbprefix'] = "";
     $config['pconnect'] = FALSE;
     $config['db_debug'] = TRUE;
     
     $this->load->model('<var>Model_name</var>', '', <kbd>$config</kbd>);

Ultimo aggiornamento ( Sabato 12 Giugno 2010 05:32 )