Oz MVC framework-də Dispetçerin hazırlanması

Faylın index.php hazırkı məzmununu xatırlayaq:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // sizin avtomatik yukləmə realizasiyanız
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>

Gördüyünüz kimi, hazırda router-ımız Track sinfinin obyektini qaytarır, içində nəzarətçinin adı, hərəkət adı və ü̈nvan sətirindən parametrlər saxlayır. Bundan əlavə, əvvəlki dərsdə biz bütün nəzarətçilərin valideynini etdik.

İndi biz $track dəyişənimizdə saxlanılan məlumatlara əsasən nəzarətçi metodunun çağrılmasını təmin edə bilərik.

Bununla xüsusi Dispatcher sinfi məşğul olacaq. Dispetçer Track sinfinin obyektini alacaq və onun məlumatlarına əsasən göstərilən sinfin obyektini yaradacaq, bu sinfin metodunu çağıracaq, metoda parametrləri ötürəcək.

Gəlin index.php faylına dispetçerin çağrılmasını əlavə edək:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // sizin avtomatik yukləmə realizasiyanız
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
  
  // Dispetçerin çağrılması:
  $page  = ( new Dispatcher ) -> getPage($track);
?>

Dispetçerimizin getPage metodunun çağrılması nəzarətçinin render metodunu çağıracaq və bu metodun çağrılmasının qaytardığını qaytaracaq. Əvvəlki dərsdən artıq bildiyiniz kimi, nəzarətçinin render metodu Page sinfinin obyektini qaytarır.

Budur Dispatcher sinfimizin hazırlığı:

/core/Dispatcher.php<?php
  namespace Core;
  
  class Dispatcher
  {
    public function getPage(Track $track)
    {
      ...kod
      return nəzarətçi -> render(parametrlər);
    }
  }
?>
Задание 1

Mənim hazırlığımdan istifadə edərək təsvir olunan Dispatcher sinfini realizə edin. Onun işini yoxlayın. Çətinliklər olduqda mənim hazırladığım təlim framework-unun fayllarındakı mənbə koduna baxın.