การนำ 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");
}
}
?>
การกำหนดเส้นทาง (Routing)
สร้างการกำหนดเส้นทางที่เกี่ยวข้อง:
<?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
]);
}
}
?>
วิว (View)
สร้างวิวสำหรับเมธอด 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 และแสดงสินค้าทั้งหมดได้ โดยให้ทำงานคล้าย
กับตัวอย่างในทฤษฎี