自前のMVCフレームワークにおけるディスパッチャの開発
ファイル 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 にディスパッチャの呼び出しを追加しましょう:
<?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 クラスのテンプレートです:
<?php
namespace Core;
class Dispatcher
{
public function getPage(Track $track)
{
...コード
return コントローラ -> render(パラメータ);
}
}
?>
私のテンプレートを使用して、説明された
Dispatcher クラスを実装してください。その動作を確認してください。
困難な場合は、私が作成した学習用フレームワークの
ファイル内のソースコードを参照してください。