Իր 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 դասը: Ստուգեք նրա աշխատանքը: Դժվարությունների դեպքում դիտեք սկզբնական կոդը իմ կատարած ուսումնական ֆրեյմվորկի ֆայլերում: