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.

  • 🧩 Motivo: Il modello MVC suddivide un'applicazione in Modello (dati), Vista (presentazione) e Controller (gestione delle richieste) per un codice più pulito.
  • 🚀 Produttività: I framework forniscono librerie predefinite per l'accesso al database, la convalida e la sanificazione degli input, consentendo ai team di rilasciare funzionalità più rapidamente.
  • Opzioni: CodeIgniter, CakePHP e Laminas (precedentemente Zend) rimangono opzioni valide, mentre Kohana è stato dismesso nel 2017.
  • Modello: In CodeIgniter, i modelli estendono CI_Model e utilizzano i metodi di Query Builder per operazioni sicure sul database.
  • 🎮 controller: I controller estendono CI_Controller, leggono l'input dell'utente tramite la classe input e caricano la vista corretta.
  • 📈 Impatto: Il porting di una semplice applicazione di polling in PHP mostra come la struttura MVC riduca le duplicazioni e semplifichi la manutenzione a lungo termine.

Framework PHP MVC

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

CodeAccenditore


CodeAccenditore


https://codeigniter.com/

È 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:


kohana


kohana


http://kohanaframework.org

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:


CakePHP


CakePHP


www.cakephp.org

È 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;


Zend

https://getlaminas.org/


Zend (ora Laminas)

Si tratta di una struttura potente;

  • Sicuro, affidabile, veloce e scalabile
  • Supporta la creazione di servizi web e API.

È ideale per lo sviluppoping applicazioni aziendali. Nel 2020, Zend Framework è passato al progetto open source Laminas. Le applicazioni basate su Zend/Laminas includono:

  • Pimcore CMS,
  • DotKernel.

Tra le aziende che hanno utilizzato il framework Zend figurano:

  • BBC
  • Cisco
  • Webex
  • Offerte.com

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/

CodePagina di benvenuto di Igniter mostrata dopo extracstruttura

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

Impostazioni di configurazione del database in CodeFile database.php di Igniter

  • 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/

modulo di voto del sondaggio d'opinione reso da CodeApplicazione Igniter

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.

Viene visualizzato un messaggio di avviso di convalida quando non viene selezionato alcun voto.

Vota la tua biblioteca preferita, poi fai clic su OK. Visualizzerai la seguente pagina dei risultati.

pagina dei risultati del sondaggio d'opinione che mostra il conteggio dei voti per JavaLibreria di script

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.

Domande Frequenti

HMVC (Hierarchical Model View Controller) organizza un'applicazione in triadi MVC indipendenti che possono richiamarsi a vicenda. Framework come kohana HMVC è diventato popolare perché aiuta a modularizzare le applicazioni di grandi dimensioni.

Sì. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. laravel è attualmente il framework MVC PHP più diffuso. Segue la stessa separazione Model-View-Controller descritta qui, aggiungendo strumenti come l'ORM Eloquent e i template Blade.

Sì. Strumenti come Copilota GitHub È possibile generare modelli, controller e viste a partire da richieste. È comunque consigliabile esaminare il codice generato per individuare eventuali problemi di sicurezza, come output non codificato e SQL injection.

No. Gli assistenti basati sull'IA velocizzano la scrittura del codice, ma i framework forniscono comunque la struttura collaudata, le impostazioni di sicurezza predefinite e le convenzioni che rendono le applicazioni gestibili. I due elementi funzionano al meglio insieme.

No. CodeAccenditore È adatto agli sviluppatori con esperienza limitata nella programmazione orientata agli oggetti. Conoscere classi, metodi e l'ereditarietà di base è sufficiente per seguire i suoi pattern Model e Controller.

Riassumi questo post con: