Anwendung von MVC in PHP
Lassen Sie uns einen Blick auf die gemeinsame Anwendung alles Gelernten werfen. Nehmen wir an, auf unserer Website gibt es beispielsweise einige Artikel-Seiten. Wir möchten entweder einen Artikel anzeigen oder alle Artikel anzeigen. Lassen Sie uns betrachten, wie man das in unserem Framework umsetzen kann.
Tabelle in der Datenbank
Zuerst erstellen wir eine Tabelle pages
in der Datenbank. Wir fügen die Spalten id,
title und text hinzu. Wir füllen diese
Tabelle mit einigen Daten
über PhpMyAdmin.
Modell
Wir erstellen ein Modell mit einer Methode zum Abrufen eines Datensatzes und einer Methode zum Abrufen aller Datensätze:
<?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
Wir erstellen das entsprechende Routing:
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
Controller
Wir erstellen den 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 = 'Liste aller Seiten';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
Views
Wir erstellen das View für die Methode one:
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
Wir erstellen das View für die 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 zur Seite</td>
</tr>
<?php endforeach; ?>
</table>
</div>
Praktische Aufgaben
Nehmen wir an, Sie haben Produkte in Ihrer Datenbank.
Jedes Produkt enthält einen Namen, einen Preis, eine
Menge und eine Beschreibung. Implementieren Sie die Anzeige eines
Produkts nach id und aller Produkte ähnlich
wie in der Theorie.