PHP හි ඔබේම MVC රාමුවේ පාලකයන්

ඔබ දැනටමත් දන්නා පරිදි, අපගේ රාමුවේ සියලුම පාලකයන්ට render ක්‍රමය ඇත, එය දැක්මකට දත්ත යැවීම සඳහා ඇමතිය යුතුය. මෙම ක්‍රමය අපගේ, පරිශීලක පාලකයන් මූලයේ පිහිටා ඇති මව් පන්තිය Controller වෙතින් උරුම කර ගනී. අපි මෙම පන්තිය සාදමු:

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

ඔබට පෙනෙන පරිදි, render ක්‍රමය පරාමිතියක් ලෙස දසුනේ නම සහ පෙන්වීම සඳහා දත්ත ලබා ගනී. මෙම ක්‍රමය විශේෂ පන්තියක වස්තුවක් Page, ආපසු ලබා දෙන්න පාලක ක්‍රියාවේ දත්ත දර්ශනය පිළිබඳ තොරතුරු අඩංගු වේ. මෙම පන්තියේ දසුනේ නම, දත්ත, තවද පිටුවේ මාතෘකාව සහ අඩවියේ පිරිසැකසුම් ගොනුවේ නම අඩංගු වේ:

/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);
    }
  }
?>

මෙහි සිදුවන්නේ කුමක්දැයි මම පැහැදිලි කරමි. දසුනේ නම සහ දත්ත ක්‍රමයේ පරාමිති ලෙස පැමිණේ. කෙසේ වෙතත්, පරිශීලක පාලකයේ තවත් පිටුවේ මාතෘකාවක් දක්වා ඇත - දේපල ලිවීමෙන් title. එනම්, $this->title හි අපි ලබා දෙන මාතෘකාව අඩංගු වනු ඇත පන්තියේ ඉදිකිරීම්කරු වෙත Page.

පිරිසැකසුම් සමඟ ද සූක්ෂ්මතා ඇත. ඔබ දන්නා පරිදි, අපගේ රාමුව ගොනුවෙන් පිරිසැකසුමක් භාවිතා කරයි default.php. ඇත්ත වශයෙන්ම, සෑම ක්‍රියාවකටම වෙනත් පිරිසැකසුමක් තිබිය හැකිය. සඳහා මෙය ක්‍රියාවල දේපල layout හි කළ යුතුය වෙනත් පිරිසැකසුම් නමක් ලියන්න.

මෙය සාක්ෂාත් කර ගන්නේ කෙසේද: අපගේ මව් පාලකයාට දේපල layout, පෙරනිමියෙන් අගය 'default.php'. මෙය පෙරනිමි පිරිසැකසුම වනු ඇත. කෙසේ වෙතත්, නම් පරිශීලක පාලක ක්‍රියාව දේපලේ අගය නැවත අර්ථ දක්වයි layout, එවිට පිරිසැකසුම වෙනස් වනු ඇත.

Задание 1

මගේ පන්තියේ කේතය Controller පිටපත් කර එය ගොනුවේ තබන්න /core/Controller.php.

Задание 2

මගේ පන්තියේ කේතය Page සහ එය ගොනුවේ තබන්න /core/Page.php.