Ciao Enrico,
Benvenuto nel forum!
Parto dal presupposto che tu abbia esperienza con PHP, SQL (e la sua implementazione in MySQL) e l'utilizzo "object oriented" di PHP. Nel caso così non fosse, ti consiglio di rimediare prima di procedere con CodeIgniter o altri framework.
Puoi immaginare un framework come un pacchetto di funzioni che facilitano lo sviluppo di applicazioni web. Nello specifico:
- Evitano di dover "reinventare la ruota" riscrivendo ogni volta funzioni per collegarsi al database, acquisire dati passati tramite GET/POST, URL Rewrite etc;
- Strutturano l'applicazione in diversi "moduli" (appunto, "Views", "Models" e "Controllers", l'architettura MVC) che facilita la futura espansione del progetto e garantisce una distribuzione delle risorse sensata.
***Partiamo da un discorso generale, prima di entrare nei dettagli di CodeIgniter...
***L'architettura MVC non è legata ad un particolare linguaggio. Per quanto CodeIgniter sia scritto in PHP (come altri quali Laraverl e CakePHP) ne esistono altrettanti non basati su tale linguaggio, quale il framework "rails" per Ruby (Ruby on Rails).
Un'applicazione MVC è composta da tre unità fondamentali:
- "Views": File semi-statici che hanno il solo compito di disporre il contenuto sulla pagina. Solitamente si tratta di un misto di HTML, CSS e Javascript (ed estensioni varie quali JQuery, AJAX, etc.)
<table>
<tr>
<td>Nome:</td><td>$utente->nome</td>
</tr>
<tr>
<td>Cognome</td><td>$utente->cognome</td>
</tr>
<tr>
<td> Data Registratione</td><td>$utente->data_registratione</td>
</tr>
- "Contollers": Lo "scheletro" dell'applicazione. Questo è il file che viene chiamato quando l'utente invia una richiesta al server. Ad esempio, se la tua applicazione risiede su example.com, una richiesta a example.com/user sara indirizzata al *controller *"Users". Ad esempio:
// Questa classe estende la classe 'controller' del framework
class users extends controller {
// Qui possiamo eseguire delle istrizioni ogni volta che il controller
// viene chiamato indipendentemente da quale richiesta sarà poi eseguita
function __construct() {
// Necessario in CI
parent::__construct();
}
function index() {
/* Codice */
}
function add()
/* Codice */
}
function delete($id) {
/* Codice */
}
Ritornando quindi al nostro esempio example.com/users". "users" è il primo "url segment", ovvero dice al framework di indirizzare la richiesta al controller "users". Per default, la funzione chiamata è "index". Tuttavia, possiamo decidere altrimenti specificando un secondo "url segment". Ad esempio, example.com/users/add eseguirà la funzione "add" del controller "users". Infine, il terzo "url segment" rappresenta un parametro passato alla funzione. example.com/users/delete chiamerà la funzione 'delete' assegnando $id = 3. Alcuni framework, fra cui CodeIgniter, permettono di dichiarare ulteriori url fragment.
Le "views" sono chiamate dal "controller". Ad esempio:
function index() {
$this->load->view('index');
}
Eseguirà il file index.php nella cartella 'views' e trasmetterà il risultato (html) al browser.
Possiamo anche caricare più "views" che verranno caricate nell'ordine.
function index() {
$this->load->view('header');
$this->load->view('index');
$thsi->load->view('footer');
}
- Infine, i "model" si occupano di rappresentare il database. In genere si ha un model per tabella, anche se ciò può variare a seconda dei casi. I model sono responsabili per interagire direttamente e aggiornare o caricare informazioni salvate sul DB. Solitamente un model può: Ricevere un oggetto e salvarlo sul database *o *ricevere informazione dal database e passarla come oggetto al controller. Ad esempio:
class users_model extends model {
// Inserisce l'oggetto nel DB
function insert($user) {
$sql = "INSERT INTO users (nome, cognome, eta) VALUES ($user->nome, $user->cognome, $user->età)";
$this->query($sql);
}
function get($id) {
$sql = "SELECT users.nome, users.cognome, users.eta FROM users WHERE id = $id";
$result = $this->query($sql);
$user = new user();
$user->nome = $result->nome;
$user->cognome = $result->cognome;
$user->eta = $result->eta;
return $user;
}
}
Quindi, la richiesta viene inoltrata al controller , il controller elabora la richiesta, aggiorna il database o recupera informazioni tramite il model e la trasmette al view che la presenta all'utente.
Per quanto riguarda CodeIgniter
CI usa la propria library 'load' per generare istanze di un oggetto.
Quindi, invece di:
[PHP]include('../models/myModel.php');[/PHP]
Si usa:
[PHP]$this->load->model('myModel');[/PHP]
Che si può poi chiamare tramite
[PHP] $this->myModel->myMethod();[/PHP]
Ad esempio:
[PHP]$user = $this->myModel->getWhereId($id);[/PHP]
Può essere usato per recuperare un oggetto 'user' dal database.
Per le views:
[PHP]$this->load->view('view');[/PHP]
Genera il file view.php nella cartella views.
Fammi sapere come va!