Framework CodeIgniter MVC (Model View Controller) con esempio
Che cos'è MVC?
Standard MVC per Model-View-Control. È un pattern architetturale che divide l'applicazione in tre componenti principali.
1. Il modello si occupa della logica aziendale e delle interazioni del database
2. Il controller coordina le attività tra il modello e la vista
3. View è responsabile della presentazione dei dati
Di seguito sono riportati alcuni dei vantaggi del modello architettonico MVC
- Accoppiamento lento: i componenti esistono e funzionano indipendentemente l'uno dall'altro.
- Flessibilità: è possibile apportare facilmente modifiche ai singoli componenti
- Aumento della produttività: più persone possono lavorare al progetto contemporaneamente. Gli sviluppatori front-end possono lavorare su visualizzazioni e presentazioni mentre gli sviluppatori back-end possono concentrarsi sui modelli e poiché il sistema è poco accoppiato, alla fine funziona
Modello
Il modello è responsabile dell'interazione con le origini dati. Solitamente si tratta di un database, ma può anche essere un servizio che fornisce i dati richiesti. È inoltre prassi comune che la logica aziendale sia contenuta nei modelli anziché nel titolare del trattamento. Questa pratica è solitamente definita controller skinny del modello grasso.
Il modello solitamente scrive i dati nel database, fornisce un meccanismo per la modifica, l'aggiornamento e l'eliminazione dei dati. In una moderna applicazione Web, i modelli utilizzano modelli di progettazione di accesso ai dati come il record attivo per facilitare l'interazione con il database.
Ad esempio, CodeIgniter utilizza una libreria integrata Active Record per supportare i modelli mentre altri framework come Laravel utilizzano Eloquent Object Relational Mapper (ORM) che facilita l'accesso ai dati.
Controller
Il controller ascolta le richieste in arrivo di risorse da parte degli utenti. Funziona come intermediario tra il modello e la vista e talvolta implementa anche alcune regole aziendali. Supponiamo che il controller riceva una richiesta per registrare un utente nel database.
Il controller può eseguire la convalida dei dati su ciò che è stato inviato per garantire che tutti i parametri richiesti siano stati inviati. Se manca qualcosa, l'utente viene reindirizzato alla pagina di registrazione con il messaggio di errore appropriato visualizzato. Il controller può anche richiedere al modello di eseguire un'ulteriore convalida controllando se l'indirizzo e-mail inviato esiste già. Se tutte le regole di convalida passano, il controller invia i dati al modello per l'elaborazione e attende la risposta.
Una volta che il modello ha elaborato le informazioni e ha restituito una risposta positiva, il controller carica la vista appropriata e passa i dati restituiti dal modello come parametro.
Visualizza
La vista si occupa dei dati presentati all'utente finale. Nelle applicazioni Web, le visualizzazioni spesso contengono HTML, CSS e facoltativamente JavaCopione. Le viste contengono il codice di programmazione minimo. Il codice contenuto nelle viste è solitamente utilizzato per scorrere le raccolte di dati ricevute come parametri dal modello o dalla funzione helper per ripulire i dati o creare collegamenti per modificare i record. La maggior parte delle applicazioni web moderne di solito utilizza motori di template che definiscono la propria sintassi, che è più simile a pseudocodice e può essere facilmente compresa dai designer. Quando si lavora con CodeIgniter, è prassi comune utilizzare tag PHP brevi e strutture di controllo. Per visualizzare qualcosa in CodeIgniter, si potrebbe utilizzare il seguente codice
<?=$title?>
Al contrario di
<?php echo $title; ?>
Le strutture di controllo sono solitamente scritte come segue
<?php foreach ($customers as $customer): ?> <li> <p><?=$customer->first_name?><p> </li> <?php endforeach; ?>
Come puoi vedere dall'esempio sopra, la vista utilizzerà una combinazione di PHP e HTML invece di racchiudere tutto nel puro codice PHP.
Come funzionano i framework MVC?
L'immagine seguente mostra il funzionamento del framework MVC
Un controller riceve la richiesta dall'utente, interagisce con il modello di database, se necessario, quindi restituisce il risultato al browser sotto forma di codice HTML che il browser interpreta in un formato leggibile dall'uomo e viene visualizzato all'utente.
Controller CodeIgniter
Analizziamo ora cosa è successo quando abbiamo caricato l'URL sopra nel browser web.
Apri il file Welcome.php controller che si trova application/controllers
Dovresti essere in grado di vedere il seguente codice
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Welcome extends CI_Controller { public function index() { $this->load->view('welcome_message'); } }
QUI,
- define('BASEPATH') OR exit('Nessun accesso diretto allo script consentito'); impedisce l'accesso diretto al controller se la richiesta non è arrivata tramite index.php. questo è per motivi di sicurezza.
- class Welcome extends CI_Controller {…} definisce la classe del controller Welcome ed estende la classe genitore CI_Controller
- la funzione pubblica index(){…} definisce il metodo dell'indice che risponde all'URL
http://localhost:3000
- $this->load->view('welcome_message'); carica la vista messaggio_di benvenuto che si trova nella directory application/views
Ora aggiorneremo il metodo dell'indice come segue
public function index() { $this->load->model('customers_model'); $data['customer'] = $this->customers_model->get_customer(3); $this->load->view('welcome_message',$data); }
QUI,
- $this->load->model('customers_model'); carica il modello dei clienti.
- $data['customer'] = $this->customers_model->get_customer(3); chiama il metodo get_customer di clienti_modello e passa il parametro 3. In questo esempio abbiamo codificato il valore, ma nelle applicazioni della vita reale questo sarebbe un parametro dell'URI.
- $this->load->view('welcome_message',$data); carica la vista Welcome_message e passa la variabile $data alla vista
Modello CodeIgniter
Creiamo ora la vista a cui abbiamo fatto riferimento nel codice precedente. Per semplicità, il nostro modello non interagirà con il file banca dati ma restituirà un record cliente statico. Lavoreremo con i database nei prossimi tutorial.
Crea un file Customers_model.php in application/models
Aggiungere il seguente codice
<?php class Customers_model extends CI_Model { public function get_customer($id) { $data['id'] = 3; $data['first_name'] = 'John'; $data['last_name'] = 'Doe'; $data['address'] = 'Kingstone'; return $data; } }
QUI,
- class Customers_model extends CI_Model {…} definisce il modello Customers_model che estende CI_Model.
- la funzione pubblica get_customer($id) {…} definisce il metodo get customer in base a un ID cliente
- $data[…] definisce i valori statici del nostro cliente fittizio. Dovrebbe essere una riga restituita dal database.
- restituire $dati; restituisce i dati del cliente.
Cioè, per il nostro modello. Modifichiamo ora la visualizzazione del messaggio di benvenuto
Apri Welcome_message.php situato in
application/views/welcome_message.php
Sostituisci il codice con il seguente
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>CodeIgniter MVC Basics</title> </head> <body> <h1>Customer Details Card</h1> <p>Customer ID : <strong><?=$customer['id']?></strong></p> <p>First Name : <strong><?=$customer['first_name']?></strong></p> <p>Last Name : <strong><?=$customer['last_name']?></strong></p> <p>Address : <strong><?=$customer['address']?></strong></p> </body> </html>
Salva le modifiche
Carica il seguente URL nel browser web
http://localhost:3000/
Dovresti essere in grado di vedere la scheda cliente come mostrato nell'immagine qui sotto
Sintesi
- MVC è un modello architettonico che divide l'applicazione in tre componenti principali
- Il modello è responsabile dell'interazione con le origini dati
- Il controller ascolta le richieste in arrivo di risorse da parte degli utenti
- Nelle applicazioni Web, le visualizzazioni spesso contengono HTML, CSS e, facoltativamente JavaCopione
- Un controller riceve la richiesta dall'utente, interagisce con il modello di database, se necessario, quindi restituisce il risultato al browser sotto forma di codice HTML