Toepassing van MVC in PHP
Laten we eens kijken naar de gezamenlijke toepassing van alles wat we hebben geleerd. Stel dat we bijvoorbeeld op de website enkele artikelpagina's hebben. We willen ofwel één artikel tonen, ofwel alle artikelen tonen. Laten we bekijken hoe we dit kunnen doen in ons framework.
Tabel in de database
Laten we om te beginnen een tabel pages
aanmaken in de database. We voegen kolommen id,
title en text toe. Vullen we deze
tabel met wat gegevens
via PhpMyAdmin.
Model
Laten we een model maken met een methode voor het ophalen van één record en een methode voor het ophalen van alle records:
<?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
Laten we de bijbehorende routing maken:
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
Controller
Laten we een controller maken:
<?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 = 'Lijst van alle pagina\'s';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
Views
Laten we een view maken voor de methode one:
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
Laten we een view maken voor de methode 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 naar pagina</td>
</tr>
<?php endforeach; ?>
</table>
</div>
Praktische opdrachten
Stel dat u producten in uw database heeft.
Elk product bevat een naam, prijs,
hoeveelheid en beschrijving. Implementeer de weergave van één
product op basis van id en alle producten vergelijkbaar
met hoe het in de theorie is gedaan.