การนำ MVC ไปใช้ใน PHP

ลองมาดูการนำทุกสิ่งที่เราได้เรียนรู้ไปใช้ร่วมกัน ตัวอย่างเช่น สมมติว่าเว็บไซต์ของเรามีบทความหรือหน้าเว็บบางหน้า เราต้องการแสดงบทความเดียวหรือแสดงบทความทั้งหมด มาดูกันว่าเราจะทำสิ่งนี้ได้อย่างไร ในเฟรมเวิร์กของเรา

ตารางในฐานข้อมูล

เริ่มต้นด้วยการสร้างตาราง pages ในฐานข้อมูล เพิ่มคอลัมน์ id, title และ text ลงไป กรอกข้อมูล ในตารางนี้ด้วยข้อมูลบางอย่าง ผ่าน PhpMyAdmin

โมเดล

สร้างโมเดลพร้อมเมธอดสำหรับดึงข้อมูลหนึ่งเรกคอร์ด และเมธอดสำหรับดึงข้อมูลทั้งหมด:

/project/models/Page.php<?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)

สร้างการกำหนดเส้นทางที่เกี่ยวข้อง:

/project/config/routes.php<?php
  use \Core\Route;
  
  return [
    new Route('/page/:id', 'page', 'one'),
    new Route('/pages/',   'page', 'all'),
  ];
?>

คอนโทรลเลอร์

สร้างคอนโทรลเลอร์:

project/controllers/PageController.php<?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:

/project/views/page/one.php<h1><?= $h1; ?></h1>
<div id="content">
  <?= $text; ?>
</div>

สร้างวิวสำหรับเมธอด all:

/project/views/page/all.php<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>

งานภาคปฏิบัติ

Задание 1

สมมติว่าคุณมีสินค้าในฐานข้อมูล แต่ละสินค้าประกอบด้วยชื่อ ราคา จำนวน และคำอธิบาย จงทำให้สามารถแสดงสินค้าหนึ่งรายการ ตาม id และแสดงสินค้าทั้งหมดได้ โดยให้ทำงานคล้าย กับตัวอย่างในทฤษฎี