Pattern MVC in PHP

MVC è l’acronimo di Model-View-Controller, un modello di architettura per lo sviluppo di software che si concentra sulla separazione della logica di business (Model), dell’interfaccia utente (View) e della logica di controllo (Controller). La teoria sostiene che questa separazione permette una maggiore modularità, manutenibilità e scalabilità del codice.

Il Model rappresenta i dati e le regole di business che governano il comportamento del software. La View è l’interfaccia utente che visualizza i dati del modello e fornisce un mezzo per l’utente di interagire con esso. Il Controller agisce come un intermediario tra il modello e la vista, gestendo le richieste dell’utente, la modifica dei dati del modello e la selezione della vista appropriata da visualizzare.

Questa architettura è molto utilizzata nello sviluppo di software a livello aziendale e nelle applicazioni web, dove è importante garantire una buona separazione tra la logica di business e l’interfaccia utente per facilitare la manutenzione e l’estensione del software.

Folder structure generica che usa il pattern MVC in PHP

/root
  |- /public (cartella pubblica che contiene file accessibili direttamente dal browser)
  |  |- /css (file CSS)
  |  |- /js (file JavaScript)
  |  |- /img (immagini)
  |  |- index.php (punto di ingresso per il sito web)
  |
  |- /src (cartella che contiene il codice sorgente del progetto)
  |  |- /controller (controllori che gestiscono la logica del business)
  |  |- /model (modelli che rappresentano i dati e le regole di business)
  |  |- /view (viste che gestiscono la logica di presentazione)
  |
  |- /vendor (cartella che contiene librerie esterne o framework)
  |
  |- composer.json (file di configurazione per Composer)
  |- composer.lock (file generato da Composer che mantiene traccia delle dipendenze installate)
  |- README.md (file di documentazione per il progetto)

Esempio del pattern MVC in PHP

Ecco un esempio pratico di come potrebbe essere utilizzata questa struttura per un semplice progetto di visualizzazione dei dati di un’azienda:

/mycompany
  |- /public
  |  |- /css
  |  |  |- style.css
  |  |- /js
  |  |  |- script.js
  |  |- /img
  |  |  |- logo.png
  |  |- index.php
  |
  |- /src
  |  |- /controller
  |  |  |- CompanyController.php
  |  |- /model
  |  |  |- Company.php
  |  |- /view
  |  |  |- company.php
  |
  |- /vendor
  |
  |- composer.json
  |- composer.lock
  |- README.md

Il file index.php nella cartella public è il punto di ingresso per il sito web. Da qui, vengono caricati i controllori, che gestiscono la logica di business e i modelli, che rappresentano i dati. I dati vengono quindi visualizzati nella vista company.php nella cartella view. La cartella css contiene il foglio di stile style.css, mentre la cartella js contiene lo script JavaScript script.js. Le immagini sono memorizzate nella cartella img.

Questo è solo un esempio di base per illustrare come questa struttura di cartelle potrebbe essere utilizzata in un progetto PHP. Potrebbe essere necessario modificare o estendere questa struttura in base alle esigenze specifiche del progetto.

index.php:

<?php

require_once '../src/controller/CompanyController.php';

$controller = new CompanyController();
$data = $controller->getData();

require_once '../src/view/company.php';

CompanyController.php:

<?php

require_once '../src/model/Company.php';

class CompanyController
{
    public function getData()
    {
        $model = new Company();
        return $model->getData();
    }
}

Company.php:

<?
class Company
{
    private $conn;

    public function __construct()
    {
        $servername = "localhost";
        $username = "your_username";
        $password = "your_password";
        $dbname = "your_database";

        $this->conn = new mysqli($servername, $username, $password, $dbname);
        if ($this->conn->connect_error) {
            die("Errore di connessione: " . $this->conn->connect_error);
        }
    }

    public function getData()
    {
        $sql = "SELECT name, year_founded, employees, revenue FROM company";
        $result = $this->conn->query($sql);
        $data = [];
        while ($row = $result->fetch_assoc()) {
            $data[] = $row;
        }
        return $data;
    }
}

company.php:

<!DOCTYPE html>
<html>
<head>
    <title>My Company</title>
    <link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
    <header>
        <img src="img/logo.png" alt="My Company">
        <h1>My Company</h1>
    </header>
    <main>
        <table>
            <?php foreach ($data as $row): ?>
            <tr>
                <th>Nome</th>
                <td><?php echo $row['name']; ?></td>
            </tr>
            <tr>
                <th>Anno di fondazione</th>
                <td><?php echo $row['year_founded']; ?></td>
            </tr>
            <tr>
                <th>Numero di dipendenti</th>
                <td><?php echo $row['employees']; ?></td>
            </tr>
            <tr>
                <th>Fatturato</th>
                <td><?php echo $row['revenue']; ?></td>
            </tr>
            <?php endforeach; ?>
        </table>
    </main>
    <footer>
        <p>Tutti i diritti riservati</p>
    </footer>
    <script type="text/javascript" src="js/script.js"></script>
</body>
</html>

Link utili

Lezioni sul linguaggio PHP

Pattern MVC in Java

Lezioni sul linguaggio MySQL

Pubblicato da Carlo Contardi

Carlo Contardi, docente di informatica e sviluppatore Full Stack, condivide la sua passione per la programmazione e l’informatica attraverso il suo blog Space Coding. Offre preziosi consigli e soluzioni pratiche a chi vuole imparare a programmare o migliorare le proprie abilità. 🚀👨‍💻

Translate »