Εφαρμογή του MVC σε PHP
Ας δούμε την κοινή εφαρμογή όλων των γνωστών πραγμάτων. Ας υποθέσουμε, για παράδειγμα, ότι έχουμε κάποια άρθρα-σελίδες στον ιστότοπό μας. Θέλουμε είτε να εμφανίσουμε ένα άρθρο, είτε να εμφανίσουμε όλα τα άρθρα. Ας δούμε πώς μπορούμε να το κάνουμε στο πλαίσιό μας.
Πίνακας στη ΒΔ
Για να ξεκινήσουμε, ας δημιουργήσουμε τον πίνακα pages
στη βάση δεδομένων. Θα προσθέσουμε τις στήλες id,
title και text. Ας γεμίσουμε αυτόν τον
πίνακα με κάποια δεδομένα
μέσω του PhpMyAdmin.
Μοντέλο
Ας φτιάξουμε ένα μοντέλο με μια μέθοδο για την ανάκτηση μιας εγγραφής και μια μέθοδο για την ανάκτηση όλων των εγγραφών:
<?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");
}
}
?>
Δρομολόγηση
Ας φτιάξουμε την αντίστοιχη δρομολόγηση:
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
Ελεγκτής
Ας φτιάξουμε τον ελεγκτή:
<?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 = 'Λίστα όλων των σελίδων';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
Προβολές
Ας φτιάξουμε την προβολή για τη μέθοδο one:
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
Ας φτιάξουμε την προβολή για τη μέθοδο all:
<h1><?= $h1; ?></h1>
<div id="content">
<table>
<tr>
<th>id</th>
<th>title</th>
<th>σύνδεσμος</th>
</tr>
<?php foreach ($pages as $page): ?>
<tr>
<td><?= $page['id']; ?></td>
<td><?= $page['title']; ?></td>
<td><a href="/page/<?= $page['id']; ?>/">σύνδεσμος προς τη σελίδα</td>
</tr>
<?php endforeach; ?>
</table>
</div>
Πρακτικές Ασκήσεις
Ας υποθέσουμε ότι έχετε προϊόντα στη βάση δεδομένων σας.
Κάθε προϊόν περιέχει τίτλο, τιμή και
ποσότητα, περιγραφή. Υλοποιήστε την εμφάνιση ενός
προϊόντος κατά id και όλων των προϊόντων παρόμοια
με αυτό που γίνεται στη θεωρία.