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>