การพัฒนาตัวจัดการใน MVC framework ของเราเอง

จำเนื้อหาปัจจุบันของไฟล์ index.php:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // การใช้งาน autoload ของคุณ
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>

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

ตอนนี้เราสามารถทำให้เกิด การเรียกใช้เมธอดของคอนโทรลเลอร์ได้ ซึ่งข้อมูล ที่อยู่ภายในตัวแปร $track ของเรา

สิ่งนี้จะถูกดูแลโดยคลาสพิเศษ Dispatcher ตัวจัดการจะได้รับอ็อบเจ็กต์คลาส Track และจากข้อมูลนั้นจะสร้างอ็อบเจ็กต์ของคลาสที่ระบุ เรียกเมธอดของคลาสนั้น โดยส่ง พารามิเตอร์เข้าไปในเมธอดนั้น

มาเพิ่มการเรียกใช้ตัวจัดการในไฟล์ index.php กัน:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // การใช้งาน autoload ของคุณ
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
  
  // การเรียกใช้ตัวจัดการ:
  $page  = ( new Dispatcher ) -> getPage($track);
?>

การเรียกเมธอด getPage ของตัวจัดการของเรา จะเรียกเมธอด render ของคอนโทรลเลอร์ และส่งคืนค่าที่ได้จากการเรียกเมธอดนั้น ดังที่คุณทราบจากบทเรียนที่แล้ว เมธอด render ของคอนโทรลเลอร์จะส่งคืนอ็อบเจ็กต์ คลาส Page

นี่คือโครงร่างของคลาส Dispatcher ของเรา:

/core/Dispatcher.php<?php
  namespace Core;
  
  class Dispatcher
  {
    public function getPage(Track $track)
    {
      ...โค้ด
      return คอนโทรลเลอร์ -> render(พารามิเตอร์);
    }
  }
?>
Задание 1

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