back to top

CodeIgniter Models

I Models in CodeIgniter sono delle classi in linguaggio PHP realizzate per l’interazione con i contenuti di una base di dati; i Models metteranno quindi a disposizione funzioni per l’inserimento, l’aggiornamento, la cancellazione e la selezione tramite interrogazioni di records all’interno di tabelle. Le classi relative ai Models debbono essere salvate all’interno del percorso:

system/application/models/
Da qui il framework andrà a caricare i diversi Models disponibili quando questi verranno richiamati da un’applicazione (è possibile organizzare la struttura delle cartelle contenenti i Models gerarchicamente, creando directory e sub-directory all’interno delle quali memorizzarli).

La struttura di un Model è sintatticamente molto semplice:

// struttura di un Model
// nome della classe
class Nome_model extends Model {
  // funzione di classe
  function Nome_model() {
    parent::Model();
  }
}
"Nome_model" è il nome della classe definita dall’utilizzatore. Una classe riferita ad un Model deve essere definita utilizzando per il suo nome l’iniziale maiuscola e tutte le altre lettere minuscole; da notare come "Nome_model" sia in realtà una sottoclasse in quanto estensione della classe principale Model disponibile tramite le librerie di CodeIgniter.

Come nei casi visti in precedenza per Controllers e Views, anche le classi relative ai Models vanno allocate in file che devono essere salvati associando ad essi il nome della classe espressa in lettere minuscole (anche l’iniziale), per cui la classe "Nome_model" dovrà essere salvata in un file chiamato "nome_model.php". Il percorso a questo file sarà quello precedentemente identificato.

application/models/nome_model.php
Così come per le Views, anche un Model non può essere richiamato direttamente, questa procedura deve infatti avvenire all’interno di un Controller attraverso l’utilizzo di una semplice sintassi:
$this->load->model('nome_model');
Nel caso in cui un Model sia stato salvato all’interno di una sottocartella (della cartella "models"), questo dovrà essere essere richiamato specificando il percorso relativo al Model; si supponga per esempio di aver creato un Model contenente una classe denominata "Utenti" e di averne salvato il file "utenti.php" all’interno di una cartella chiamata "sito", la chiamata del modello relativo a questa classe dovrà quindi essere la seguente:
$this->load->model('sito/utenti');
Una volta richiamato e quindi caricato un Model, per poter accedere alle funzioni del medesimo sarà necessario utilizzare un oggetto che abbia lo stesso nome della classe:
$this->load->model('nome_model');
$this->nome_model->function();
In ogni caso, al momento del caricamento della classe è possibile specificare un nome diverso da associare all’oggetto da utilizzare per l’accesso alle funzioni del Model, basterà passare il nuovo nome come secondo parametro al metodo "load->model()":
// riassegnazione del nome all'oggetto per l'accesso alla classe
$this->load->model('Nome_model', 'esempio');

// accesso alle funzioni di classe tramite il nuovo nome
$this->esempio->function();
Nel momento in cui viene caricato un Model, questo non consente di connettersi automaticamente ad un database; una soluzione immediata per stabilire una connessione è quello di utilizzare la funzione per il caricamento del Model passando ad essa un terzo parametro a cui associare il valore booleano TRUE:
$this->load->model('nome_model', '', TRUE);
La connessione verrà stabilita sulla base dei parametri indicati nel file presente sul percorso:
system/application/config/database.php
Diversamente è possibile stabilire una connessione passando direttamente l’array $config come terzo parametro alla funzione per il caricamento del Model:
// parametri per la connessione al DBMS e la selezione del database
$config['hostname'] = "localhost";
$config['username'] = "username";
$config['password'] = "password";
$config['database'] = "nome_database";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "sito_";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;

// connessione al database tramite funzione per il caricamento del Model
$this->load->model('Nome_model', '', $config);

Pubblicitร 
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.