Applicazione di MVC in PHP
Diamo un'occhiata all'applicazione congiunta di tutto ciò che è stato studiato. Supponiamo, ad esempio, che sul nostro sito ci siano alcune pagine-articoli. Vogliamo mostrare un singolo articolo oppure mostrare tutti gli articoli. Vediamo come farlo nel nostro framework.
Tabella nel DB
Per iniziare, creiamo una tabella pages
nel database. Aggiungiamo le colonne id,
title e text. Compiliamo questa
tabella con alcuni dati
tramite PhpMyAdmin.
Modello
Creiamo un modello con un metodo per ottenere un singolo record e un metodo per ottenere tutti i record:
<?php
namespace Project\Models;
use \Core\Model;
class Page extends Model
{
public function getById($id)
{
return $this->findOne("SELECT * FROM pages WHERE id=$id");
}
public function getAll()
{
return $this->findMany("SELECT id, title FROM pages");
}
}
?>
Routing
Creiamo il routing corrispondente:
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
Controller
Creiamo il controller:
<?php
namespace Project\Controllers;
use \Core\Controller;
use \Project\Models\Page;
class PageController extends Controller
{
public function one($params)
{
$page = (new Page) -> getById($params['id']);
$this->title = $page['title'];
return $this->render('page/one', [
'text' => $page['text'],
'h1' => $this->title
]);
}
public function all()
{
$this->title = 'Elenco di tutte le pagine';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
Viste
Creiamo la vista per il metodo one:
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
Creiamo la vista per il metodo all:
<h1><?= $h1; ?></h1>
<div id="content">
<table>
<tr>
<th>id</th>
<th>title</th>
<th>link</th>
</tr>
<?php foreach ($pages as $page): ?>
<tr>
<td><?= $page['id']; ?></td>
<td><?= $page['title']; ?></td>
<td><a href="/page/<?= $page['id']; ?>/">link alla pagina</td>
</tr>
<?php endforeach; ?>
</table>
</div>
Compiti pratici
Supponiamo che nel tuo database ci siano prodotti.
Ogni prodotto contiene nome, prezzo,
quantità e descrizione. Implementa la visualizzazione di un singolo
prodotto tramite id e di tutti i prodotti in modo simile
a quanto fatto nella teoria.