Tillämpning av MVC i PHP
Låt oss titta på tillämpningen av allt vi har lärt oss. Låt oss säga att vi till exempel på webbplatsen har några artiklar/sidor. Vi vill antingen visa en artikel eller visa alla artiklar. Låt oss överväga hur man gör detta i vår ramverk.
Tabell i databasen
Låt oss först skapa tabellen pages
i databasen. Låt oss lägga till kolumnerna id,
title och text. Låt oss fylla denna
tabell med några data
via PhpMyAdmin.
Modell
Låt oss skapa en modell med en metod för att hämta en post och en metod för att hämta alla poster:
<?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");
}
}
?>
Routning
Låt oss skapa motsvarande routing:
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
Kontroller
Låt oss skapa en kontroller:
<?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 = 'Lista över alla sidor';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
Vyer
Låt oss skapa en vy för metoden one:
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
Låt oss skapa en vy för metoden all:
<h1><?= $h1; ?></h1>
<div id="content">
<table>
<tr>
<th>id</th>
<th>title</th>
<th>länk</th>
</tr>
<?php foreach ($pages as $page): ?>
<tr>
<td><?= $page['id']; ?></td>
<td><?= $page['title']; ?></td>
<td><a href="/page/<?= $page['id']; ?>/">länk till sidan</td>
</tr>
<?php endforeach; ?>
</table>
</div>
Praktiska uppgifter
Anta att du har produkter i din databas.
Varje produkt innehåller namn, pris och
kvantitet, beskrivning. Implementera visning av en
produkt efter id och alla produkter liknande
som gjorts i teorin.