Anvendelse af MVC i PHP
Lad os se på den fælles anvendelse af alt det lærte. Lad os antage, at vi har nogle artikler-sider på vores hjemmeside. Vi ønsker enten at vise en enkelt artikel eller vise alle artikler. Lad os se på, hvordan man gør dette i vores framework.
Tabel i databasen
Til at starte med, lad os oprette tabellen pages
i databasen. Vi tilføjer kolonnerne id,
title og text. Lad os udfylde denne
tabel med nogle data
via PhpMyAdmin.
Model
Lad os lave en model med en metode til at hente et enkelt datasæt og en metode til at hente alle datasæt:
<?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
Lad os lave den tilsvarende routing:
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
Controller
Lad os lave controlleren:
<?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 = 'Liste over alle sider';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
Views
Lad os lave viewet for metoden one:
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
Lad os lave viewet for metoden all:
<h1><?= $h1; ?></h1>
<div id="content">
<table>
<tr>
<th>id</th>
<th>title</th>
<th>henvisning</th>
</tr>
<?php foreach ($pages as $page): ?>
<tr>
<td><?= $page['id']; ?></td>
<td><?= $page['title']; ?></td>
<td><a href="/page/<?= $page['id']; ?>/">henvisning til siden</td>
</tr>
<?php endforeach; ?>
</table>
</div>
Praktiske opgaver
Antag, at du har produkter i din database.
Hvert produkt indeholder et navn, en pris og
en mængde, en beskrivelse. Implementer visning af et
enkelt produkt efter id og alle produkter på samme måde
som vist i teorien.