PHP ရှိ ကိုယ်ပိုင် MVC Framework တွင် Controller များ

သင်သိပြီးဖြစ်သည့်အတိုင်း၊ ကျွန်ုပ်တို့၏ framework ရှိ Controller အားလုံးတွင် view သို့ဒေတာများပို့ရန် ခေါ်ယူအသုံးပြုရမည့် render method ရှိပါသည်။ ဤ method ကို ကျွန်ုပ်တို့၏ သုံးစွဲသူ Controller များသည် ဗဟို core တွင်တည်ရှိသော မိဘအတန်းအစား Controller မှ အမွေဆက်ခံရရှိပါသည်။ ထိုအတန်းအစားကို ဖန်တီးကြပါစို့။

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

သင်မြင်သည့်အတိုင်း၊ render method သည် ပြသမည့်အမြင်၏အမည်နှင့် ဒေတာများကို parameter အဖြစ်လက်ခံပါသည်။ ဤ method ကို ကိုယ်စားပြုမှုအချက်အလက်များပါရှိမည့် အထူးအတန်းအစား Page ၏ object ကို ပြန်ပေးပါစို့။ ဤအတန်းအစားတွင် Controller action ၏ ကိုယ်စားပြုမှုအချက်အလက်၊ ဒေတာများအပြင် စာမျက်နှာ title နှင့် website layout file ၏အမည်တို့ ပါဝင်ပါမည်။

/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 method ၏ကုဒ်သည် ဤကဲ့သို့ ဖြစ်လာပါမည်။

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

ဤနေရာတွင်ဖြစ်ပျက်နေသည်များကို ရှင်းပြပါမည်။ ကိုယ်စားပြုမှု၏အမည်နှင့် ဒေတာများသည် method ၏ parameter များအဖြစ်ရောက်ရှိလာသည်။ သို့သော်၊ သုံးစွဲသူ Controller တွင် စာမျက်နှာ title ကို title property ကိုရေးသားခြင်းဖြင့် ထည့်သွင်းသတ်မှတ်နိုင်သည်။ ဆိုလိုသည်မှာ $this->title တွင် Page အတန်းအစား constructor သို့ ကျွန်ုပ်တို့ လွှဲပြောင်းပေးမည့် title ပါဝင်နေမည်ဖြစ်သည်။

Layout နှင့်ပတ်သက်၍လည်း သတိပြုစရာများရှိပါသည်။ သင်သိပြီးသည့်အတိုင်း၊ ကျွန်ုပ်တို့၏ framework သည် default.php ဖိုင်မှ layout ကိုအသုံးပြုပါသည်။ တကယ်တော့၊ action တစ်ခုစီသည် အခြား layout တစ်ခုကိုလည်း ရှိနိုင်ပါသည်။ ထိုသို့ပြုလုပ်ရန် ၎င်း action အတွင်းlayout property တွင် အခြားသော layout ၏အမည်ကို ရေးသားထည့်သွင်းရန် လိုအပ်ပါသည်။

ဤသို့ရရှိအောင် မည်သို့လုပ်ဆောင်သနည်း။ ကျွန်ုပ်တို့၏ မိဘ Controller သည် layout property ရှိပြီး၊ မူလအားဖြင့် 'default.php' တန်ဖိုးရှိပါသည်။ ထိုအရာသည်ပင်လျှင် မူလ layout ဖြစ်လာမည်။ သို့သော်၊ အကယ်၍ သုံးစွဲသူ Controller ၏ action သည် layout property ၏တန်ဖိုးကို ပြန်လည်သတ်မှတ်ပါက layout လည်းပြောင်းလဲသွားမည်ဖြစ်သည်။

Задание 1

Controller အတန်းအစား၏ကုဒ်ကို ကူးယူပြီး /core/Controller.php ဖိုင်ထဲတွင် ထားရှိပါ။

Задание 2

Page အတန်းအစား၏ကုဒ်ကို ကူးယူပြီး /core/Page.php ဖိုင်ထဲတွင် ထားရှိပါ။