Kendi MVC Framework'ümüzde Dispatcher Geliştirme

Şimdi index.php dosyasının mevcut içeriğini hatırlayalım:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // otomatik yükleme implementasyonunuz
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>

Gördüğünüz gibi, şu an için yönlendiricimiz Track sınıfının bir nesnesini döndürüyor, içinde kontrolör adı, eylem adı ve adres çubuğundan gelen parametreler bulunuyor. Ayrıca, önceki derste tüm kontrolörlerin ebeveynini yaptık.

Şimdi, $track değişkenimizde bulunan kontrolörün metodunun çağrılmasını sağlayabiliriz.

Bunu özel bir Dispatcher sınıfı yapacak. Dispatcher, Track sınıfının bir nesnesini alacak ve onun verilerine göre belirtilen sınıfın nesnesini oluşturacak, bu sınıfın metodunu çağıracak, metoda parametreleri iletecek.

Hadi index.php dosyasına dispatcher çağrısını ekleyelim:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // otomatik yükleme implementasyonunuz
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
  
  // Dispatcher çağrısı:
  $page  = ( new Dispatcher ) -> getPage($track);
?>

Dispatcher'ımızın getPage metodunun çağrısı, kontrolörün render metodunu çağıracak ve bu metodun çağrısının döndürdüğü şeyi geri döndürecek. Önceki dersten de bildiğiniz gibi, kontrolörün render metodu Page sınıfının bir nesnesini döndürür.

İşte Dispatcher sınıfımızın taslağı:

/core/Dispatcher.php<?php
  namespace Core;
  
  class Dispatcher
  {
    public function getPage(Track $track)
    {
      ...kod
      return kontrolör -> render(parametreler);
    }
  }
?>
Задание 1

Benim taslağımı kullanarak açıklanan Dispatcher sınıfını implemente edin. Çalışmasını kontrol edin. Zorluk yaşarsanız, benim yaptığım eğitim framework'ünün dosyalarındaki kaynak koda bakın.