Esercitazione sul framework PHP MVC
⚡ Riepilogo intelligente
Il framework PHP MVC separa i dati dell'applicazione e la logica di business dalla presentazione, utilizzando Modelli, Viste e Controller. CodeIgniter rende pratico questo modello, consentendo agli sviluppatori PHP di creare applicazioni web sicure e di facile manutenzione in tempi più rapidi.
Cos'è il framework PHP MVC?
PHP MVC è un modello di progettazione dell'applicazione che separa i dati dell'applicazione e la logica aziendale (modello) dalla presentazione (vista). MVC sta per Modello, Vista e Controller.
Il controller media tra i modelli e le visualizzazioni.
Pensa al modello di progettazione MVC come a un'auto e al conducente.
L'auto è dotata di parabrezza (vista) che il conducente (controllore) utilizza per monitorare il traffico davanti a sé, quindi accelerare o frenare (modello) a seconda di ciò che vede.
Vediamo ora perché vale la pena utilizzare un framework basato su questo modello.
Perché utilizzare PHP MVC Framework?
I framework PHP MVC semplificano il lavoro con tecnologie complesse grazie a:
- Nascondere tutti i dettagli complessi dell'implementazione
- Fornire metodi standard che possiamo utilizzare per costruire le nostre applicazioni
- Aumento della produttività degli sviluppatori, poiché le implementazioni di base di attività come la connessione al database e la sanificazione dell'input dell'utente sono già parzialmente implementate
- Incoraggiare l'adesione agli standard di codifica professionali
Modello di progettazione MVC PHP
Discutiamo ora brevemente ciascun componente del modello di progettazione MVC.
Modello – questa parte riguarda la logica aziendale e i dati dell'applicazione. Può essere utilizzato per eseguire convalide dei dati, elaborare i dati e archiviarli. I dati possono provenire da;
- archivio base
- banca dati
- Documento XML
- Altre fonti di dati valide.
Controller – questa è la parte che gestisce le richieste di risorse da parte dell'utente al server.
Ad esempio, quando l'utente richiede il URL …/index.php?prodotti=listIl controller caricherà il modello dei prodotti per recuperare i dati dei prodotti e quindi visualizzerà i risultati nella vista elenco.
In poche parole, il controller collega insieme i modelli e le viste a seconda delle risorse richieste.
Visualizzazioni – questa parte si occupa di presentare i dati all'utente. Solitamente avviene tramite pagine HTML.
Tipi di framework PHP MVC
Selezionare il miglior framework PHP è una sfida.
Non è necessario scrivere il proprio framework per beneficiare dei vantaggi di MVC.
Dovresti solo tentare di creare la tua progettazione di applicazioni correlate a MVC per comprendere come funzionano i framework MVC.
Una volta che ti senti a tuo agio con il funzionamento dei framework MVC, dovresti passare ai framework maturi e già testati.
La tabella seguente descrive brevemente alcuni dei framework PHP più diffusi e le funzionalità offerte da ciascuno di essi.
| Contesto | Descrizione |
|---|---|
|
|
È uno dei framework PHP MVC più popolari, ora nella sua quarta versione principale (CodeIgniter 4). È leggero e ha una curva di apprendimento breve. Ha un ricco set di librerie che aiutano a costruire siti web e applicazioni rapidamente. Anche gli utenti con conoscenze limitate di programmazione OOP possono usarlo. Applicazioni create con CodeL'innesco comprende:
|
|
Si tratta di un framework HMVC (Hierarchical Model View Controller) sicuro e leggero. Nota: Kohana è stato ufficialmente dismesso nel 2017; la sua ultima versione stabile è stata la 3.3.6 (luglio 2016). Il fork della community Koseven ha continuato a sviluppare il suo codice sorgente. Tra le aziende che hanno utilizzato Kohana figurano: |
|
È ispirato a Ruby on Rails e viene tuttora attivamente mantenuto (versione 5.x). È noto per concetti quali i modelli di progettazione del software, la convenzione sulla configurazione, ActiveRecord, ecc. CakePHP le applicazioni alimentate includono; |
|
|
Si tratta di una struttura potente;
È ideale per lo sviluppoping applicazioni aziendali. Nel 2020, Zend Framework è passato al progetto open source Laminas. Le applicazioni basate su Zend/Laminas includono:
Tra le aziende che hanno utilizzato il framework Zend figurano:
|
Framework PHP MVC vs PHP puro: differenze principali
Cosa cambia concretamente un framework nella pratica? Il PHP puro offre completa libertà, ma ogni progetto si conclude con la necessità di reinventare da zero il routing, la validazione e l'accesso al database. Un framework PHP MVC standardizza queste attività ripetitive, garantendo la coerenza del codice tra progetti e team diversi.
| Aspetto | PHP semplice | Framework PHP MVC |
|---|---|---|
| Code organizzazione | HTML, SQL e logica misti in singoli file | Suddiviso in modelli, viste e controller |
| Accesso al database | Domande scritte a mano su ogni pagina | Generatore di query integrato o ORM con binding dei parametri |
| Sicurezza | Lo sviluppatore deve ricordare ogni misura di sicurezza | Filtro degli input, protezione XSS e CSRF inclusi |
| Manutenzione | Le modifiche si propagano in modo imprevedibile attraverso i file | Ogni strato può cambiare in modo indipendente |
💡 Suggerimento: Iniziate realizzando un piccolo progetto PHP semplice, come quello del sondaggio qui sotto; la difficoltà di gestire codice misto renderà evidente il valore della separazione MVC.
Portare l'applicazione del sondaggio d'opinione su CodeAccenditore
In questa lezione, abbiamo creato un'applicazione di sondaggio PHP. Qui, trasferiremo quel codice a CodeAccenditore
- Scaricare l'ultima versione di CodeAccenditore dal loro di COSM
- ExtracCopia il contenuto del file zip nella directory di sviluppo del tuo server web. In questa lezione useremo il nome della cartella "ciopinionpoll".
- Passare al URL http://localhost/ciopinionpoll/
Migliori CodeLa pagina di benvenuto di Igniter qui sopra conferma che il framework è installato correttamente. Ora porteremo la nostra applicazione per sondaggi di opinione su CodeAccenditore. Ricordiamo che la nostra applicazione era divisa in tre componenti principali, vale a dire:
- Controller anteriore: questa è la parte che risponde a URL richiede e restituisce la pagina richiesta. Questo codice andrà nel controller
- Modello: questo è il codice che risponde alle richieste di dati e restituisce i dati richiesti. Questo codice verrà inserito nel modello.
- Visualizzazioni: questo è il codice responsabile della formattazione e della visualizzazione dei dati. Questo codice verrà visualizzato
Impostazioni di configurazione del database
Per configurare la connessione al database:
- Accedi alla cartella ciopionpoll
- Aprire il database.php file situato nella directory application/config.
- Individuare le seguenti righe di codice
- Imposta il nome utente su root
- Imposta la password sulla password di root del tuo localhost
- Imposta il nome del database su opinion_poll. Tieni presente che utilizzeremo il database creato nella lezione precedente.
- Salva le modifiche e chiudi il file.
Creare il nostro modello
Successivamente creeremo il nostro modello che estenderà CI_Model. CI_Model fa parte di CodeLibrerie Igniter. Il modello si troverà in application/models opinion_poll_model.php
<?php
class Opinion_poll_model extends CI_Model
{
public function __construct()
{
parent::__construct();
$this->load->database();
}
public function total_votes()
{
$query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries');
return $query->row()->choices_count;
}
public function get_results()
{
$libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow");
$table_rows = '';
for ($i = 1; $i < 5; $i++)
{
$query = $this->db->select('COUNT(choice) as choices_count')
->where('choice', $i)
->get('js_libraries');
$table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $query->row()->choices_count . "</b> votes</td></tr>";
}
return $table_rows;
}
public function add_vote($choice)
{
$ts = date("Y-m-d H:i:s");
$data = array('choice' => $choice, 'ts' => $ts);
$this->db->insert('js_libraries', $data);
}
}
?>
QUI,
- “class Opinion_poll_model extends CI_Model…” è il nostro modello che estende CI_Model
- “parent::__construct();” chiama il costruttore di CI_Model
- "$questo->carica->database();" carica la libreria del database in modo che la nostra applicazione possa interagire con il database
- “$this->db->” è CodeRecord di attività di Igniter. Controlla questo link per ulteriori informazioni sul record attivo.
Creazione del nostro controller
Creiamo ora il controller. Useremo quello predefinito CodeIl controller Igniter si trova in application/controllers/welcome.php. Sostituisci il suo codice sorgente con il seguente codice.
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('opinion_poll_model');
}
public function index() {
if ($this->input->post('submitbutton') && !$this->input->post('vote')) {
echo "<script>alert('You did not vote!');</script>";
}
if ($this->input->post('vote')) {
$this->opinion_poll_model->add_vote($this->input->post('vote'));
$data['total_votes'] = $this->opinion_poll_model->total_votes();
$data['rows'] = $this->opinion_poll_model->get_results();
$this->load->view('results', $data);
} else {
$this->load->view('opinion_poll_form');
}
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
?>
QUI,
- "if (!Definito('BASEPATH')) exit('Nessun accesso diretto allo script consentito');" garantisce che gli utenti non accedano direttamente alla classe controller
- “class Welcome extends CI_Controller…” il nostro controller estende la classe CI_Controller
- La funzione pubblica __construct() chiama il metodo costruttore della classe CI_Controller e carica il nostro modello Opinion_poll_model
- “public function index()…” è la funzione che mappa index.php. Utilizza CodeLa classe input di Igniter verifica se è stato inviato un voto, lo aggiunge al database e poi visualizza i risultati. Se l'array "post" della classe input è vuoto, carica la pagina di voto.
- “$this->input->post('…')” è il CodeClasse di input di Igniter che recupera il contenuto della variabile globale $_POST.
- "$this->opinion_poll_model->add_vote($this->input->post('vote'))" chiama il metodo add_vote del modello per aggiungere il voto nel database.
Creare le nostre opinioni
Ricordiamo dall'esempio precedente che avevamo due pagine HTML, una per votare e l'altra per i risultati. Useremo lo stesso codice HTML con modifiche minime per creare le nostre viste. Crea i seguenti file nella directory application/views
opinion_poll_form.php
<html>
<head>
<title>
JavaScript Libraries - Opinion Poll
</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<form method="POST" action="index.php">
<p>
<input type="radio" name="vote" value="1" /> JQuery
<br />
<input type="radio" name="vote" value="2" /> MooTools
<br />
<input type="radio" name="vote" value="3" /> YUI Library
<br />
<input type="radio" name="vote" value="4" /> Glow </p>
<p>
<input type="submit" name="submitbutton" value="OK" />
</p>
</form>
</body>
</html>
Creiamo ora la pagina dei risultati results.php
<html>
<head>
<title>JavaScript Libraries - Opinion Poll Results</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll Results</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p>
<p><table><tr><td>
<?php print($rows); ?>
</tr></td></table></p>
<p><a href="#">Return to voting page</a></p>
</body>
</html>
Testare la nostra applicazione
Supponendo che la directory principale della tua applicazione sia ciopionpoll, vai a http://localhost/ciopinionpoll/
La pagina di votazione qui sopra proviene dalla nostra vista opinion_poll_form. Clicca su OK senza selezionare un'opzione e visualizzerai il seguente messaggio di avviso.
Vota la tua biblioteca preferita, poi fai clic su OK. Visualizzerai la seguente pagina dei risultati.
Ciò conferma che i tre livelli lavorano insieme: il controller ha ricevuto il voto, il modello lo ha memorizzato e conteggiato e la vista ha visualizzato i totali.









