ကိုယ်ပိုင် MVC Framework တွင် Dispatcher ဖွံ့ဖြိုးတည်ဆောက်ခြင်း

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']);
?>

မြင်တွေ့ရသည့်အတိုင်း၊ လောလောဆယ်တွင် ကျွန်ုပ်တို့၏ router သည် Track ကလပ်စ်၏ object တစ်ခုကို ပြန်ပေးသည်၊ ၎င်းတွင် controller ၏အမည်၊ action ၏အမည်နှင့် URL မှ parameter များ ပါဝင်သည်။ ထို့အပြင်၊ ယခင်သင်ခန်းစာတွင် ကျွန်ုပ်တို့သည် controller အားလုံး၏ အမ (parent) တစ်ခုကို ပြုလုပ်ခဲ့သည်။

ယခု ကျွန်ုပ်တို့သည် $track ကိန်းရှင်ထဲတွင် ပါဝင်သော အချက်အလက်များကို အသုံးပြု၍ controller ၏ method ကို ခေါ်ယူနိုင်အောင် ပြုလုပ်နိုင်ပါသည်။

၎င်းကို အထူးကလပ်စ်တစ်ခုဖြစ်သော Dispatcher မှ တာဝန်ယူလိမ့်မည်။ Dispatcher သည် Track ကလပ်စ်၏ object ကို ရရှိပြီး ၎င်း၏အချက်အလက်များအရ ဖော်ပြထားသော ကလပ်စ်၏ object ကို ဖန်တီးမည်၊ ထိုကလပ်စ်၏ method ကို ခေါ်ယူမည်ဖြစ်ပြီး ၎င်း method ထဲသို့ parameter များကို ပို့ပေးမည်။

ယခု index.php ဖိုင်ထဲသို့ Dispatcher ခေါ်ယူမှုကို ထည့်ကြပါစို့။

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']);
  
  // Dispatcher ခေါ်ယူခြင်း:
  $page  = ( new Dispatcher ) -> getPage($track);
?>

ကျွန်ုပ်တို့၏ Dispatcher ၏ getPage method ခေါ်ယူခြင်းသည် controller ၏ render method ကို ခေါ်ယူမည်ဖြစ်ပြီး ၎င်း method ခေါ်ယူမှု ပြန်ပေးသော အရာကို ပြန်ပေးမည်ဖြစ်သည်။ ယခင်သင်ခန်းစာမှ သင်သိပြီးဖြစ်သည့်အတိုင်း controller ၏ render method သည် Page ကလပ်စ်၏ object ကို ပြန်ပေးသည်။

ဤတွင် ကျွန်ုပ်တို့၏ Dispatcher ကလပ်စ်၏ မူဘောင်တစ်ခု ရှိပါသည်။

/core/Dispatcher.php<?php
  namespace Core;
  
  class Dispatcher
  {
    public function getPage(Track $track)
    {
      ...ကုဒ်
      return controller -> render(parameters);
    }
  }
?>
Задание 1

ကျွန်ုပ်၏ မူဘောင်ကို အသုံးပြု၍ ဖော်ပြပါ Dispatcher ကလပ်စ်ကို အကောင်အထည်ဖော်ပါ။ ၎င်း၏လုပ်ဆောင်ချက်ကို စမ်းသပ်ပါ။ အခက်အခဲရှိပါက ကျွန်ုပ်ပြုလုပ်ထားသော သင်ကြားရေး framework ၏ ဖိုင်များရှိ မူရင်းကုဒ်ကို ကြည့်ရှုပါ။