ตัวควบคุมใน MVC Framework ของเราใน PHP

ดังที่คุณทราบแล้ว ตัวควบคุมทั้งหมดใน framework ของเรามีเมธอด render ซึ่งจำเป็นต้องเรียกใช้เพื่อส่งข้อมูลไปยัง view เมธอดนี้ถูกสืบทอดโดยตัวควบคุมของผู้ใช้จากคลาสแม่ Controller ที่อยู่ในส่วน core มาเริ่มสร้างคลาสนี้กัน:

/core/Controller.php<?php
  namespace Core;
  
  class Controller
  {
    protected function render($view, $data) {
      
    }
  }
?>

คุณจะเห็นว่า เมธอด render รับพารามิเตอร์เป็นชื่อ view และข้อมูลสำหรับแสดงผล กำหนดให้เมธอดนี้ส่งคืนอ็อบเจ็กต์ของคลาสพิเศษ Page ซึ่งจะมีข้อมูลเกี่ยวกับการแสดงผลของการกระทำ (action) ของตัวควบคุม ในคลาสนี้จะมีชื่อ view, ข้อมูล รวมถึง title ของหน้าและชื่อไฟล์ layout ของเว็บไซต์:

/core/Page.php<?php
  namespace Core;
  
  class Page
  {
    private $layout;
    private $title;
    private $view;
    private $data;
    
    public function __construct($layout, $title, $view, $data)
    {
      $this->layout = $layout;
      $this->title  = $title;
      $this->view   = $view;
      $this->data   = $data;
    }
    
    public function __get($property)
    {
      return $this->$property;
    }
  }
?>

ดังนั้นโค้ดของเมธอด render ของเราจะมีหน้าตาดังนี้:

/core/Controller.php<?php
  namespace Core;
  
  class Controller
  {
    protected $layout = 'default';
    
    protected function render($view, $data) {
      return new Page($this->layout, $this->title, $view, $data);
    }
  }
?>

อธิบายสิ่งที่เกิดขึ้นตรงนี้ ชื่อ view และข้อมูลถูกส่งผ่านมาเป็นพารามิเตอร์ของเมธอด อย่างไรก็ตาม ในตัวควบคุมของผู้ใช้ยังมีการกำหนด title ของหน้าโดยการกำหนดค่าให้กับพร็อพเพอร์ตี้ title ดังนั้นใน $this->title จะมี title ที่เราจะส่งต่อไปยัง constructor ของคลาส Page

นอกจากนี้ยังมีรายละเอียดเกี่ยวกับ layout อย่างที่คุณทราบ Framework ของเราใช้ layout จากไฟล์ default.php อันที่จริงแต่ละ action อาจมี layout อื่นก็ได้ สำหรับสิ่งนี้ ต้องกำหนดชื่อ layout อื่นให้กับพร็อพเพอร์ตี้ layout ใน action นั้นเอง

วิธีการทำเช่นนี้: ตัวควบคุมแม่ของเรามีพร็อพเพอร์ตี้ layout ซึ่งค่าเริ่มต้นคือ 'default.php' นี่จะเป็น layout มาตรฐาน อย่างไรก็ตาม หาก action ของตัวควบคุมผู้ใช้เปลี่ยนแปลงค่าของพร็อพเพอร์ตี้ layout นี้ layout ก็จะเปลี่ยนไปด้วย

Задание 1

คัดลอกโค้ดคลาส Controller ของฉันและวางไว้ในไฟล์ /core/Controller.php

Задание 2

คัดลอกโค้ดคลาส Page ของฉันและวางไว้ในไฟล์ /core/Page.php