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

ご覧の通り、今のところ私たちのルーターは、 コントローラ名、アクション名、およびURLからの パラメータを含む 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 クラスを実装してください。その動作を確認してください。 困難な場合は、私が作成した学習用フレームワークの ファイル内のソースコードを参照してください。