Penggunaan MVC dalam PHP
Mari kita lihat penggunaan bersama semua yang telah dipelajari. Katakan, sebagai contoh, kami mempunyai beberapa artikel-halaman di laman web. Kami mahu sama ada menunjukkan satu artikel, atau menunjukkan semua artikel. Mari kita pertimbangkan bagaimana untuk melakukannya dalam kerangka kerja kami.
Jadual dalam Pangkalan Data
Sebagai permulaan, mari buat jadual pages
dalam pangkalan data. Mari tambah lajur id,
title dan text. Mari isi
jadual ini dengan beberapa data
melalui PhpMyAdmin.
Model
Mari buat model dengan kaedah untuk mendapatkan satu rekod dan kaedah untuk mendapatkan semua rekod:
<?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");
}
}
?>
Perihalan Laluan (Routing)
Mari buat perihalan laluan yang sepadan:
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
Pengawal (Controller)
Mari buat pengawal:
<?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 = 'Senarai semua halaman';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
Paparan (Views)
Mari buat paparan untuk kaedah one:
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
Mari buat paparan untuk kaedah all:
<h1><?= $h1; ?></h1>
<div id="content">
<table>
<tr>
<th>id</th>
<th>tajuk</th>
<th>pautan</th>
</tr>
<?php foreach ($pages as $page): ?>
<tr>
<td><?= $page['id']; ?></td>
<td><?= $page['title']; ?></td>
<td><a href="/page/<?= $page['id']; ?>/">pautan ke halaman</td>
</tr>
<?php endforeach; ?>
</table>
</div>
Tugas Praktikal
Katakan anda mempunyai produk dalam pangkalan data.
Setiap produk mengandungi nama, harga dan
kuantiti, keterangan. Laksanakan paparan satu
produk mengikut id dan semua produk serupa
dengan cara yang dilakukan dalam teori.