დისპეტჩერის შემუშავება საკუთარ MVC ფრეიმვორქში

გავიხსენოთ ფაილის index.php მიმდინარე შიგთავსი:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // თქვენი ავტოლოდინგის რეალიზაცია
  });
  
  $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) {
    // თქვენი ავტოლოდინგის რეალიზაცია
  });
  
  $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. შეამოწმეთ მისი მუშაობა. სირთულეების შემთხვევაში იხილეთ საწყისი კოდი ჩემს მიერ შექმნილი სასწავლო ფრეიმვორქის ფაილებში.