Pengembangan Dispatcher dalam Framework MVC Sendiri
Mari kita ingat kembali isi file index.php saat ini:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// implementasi autoloading Anda
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>
Seperti yang Anda lihat, sejauh ini router kita mengembalikan
objek kelas Track, yang berisi nama
controller, nama action, dan parameter dari
baris alamat. Selain itu, dalam pelajaran
sebelumnya kita telah membuat induk dari semua
controller.
Sekarang kita dapat membuat agar
pemanggilan method controller terjadi, yang datanya
terkandung dalam variabel $track kita.
Ini akan ditangani oleh kelas khusus Dispatcher.
Dispatcher akan menerima objek kelas Track
dan berdasarkan datanya membuat objek dari kelas yang ditentukan,
memanggil method kelas tersebut, dan meneruskan
parameter ke method tersebut.
Mari tambahkan pemanggilan dispatcher ke file index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// implementasi autoloading Anda
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
// Pemanggilan dispatcher:
$page = ( new Dispatcher ) -> getPage($track);
?>
Pemanggilan method getPage dispatcher kita
akan memanggil method render controller
dan mengembalikan apa yang dikembalikan oleh pemanggilan method tersebut.
Seperti yang sudah Anda ketahui dari pelajaran sebelumnya, method
render controller mengembalikan objek
kelas Page.
Berikut adalah kerangka kelas Dispatcher kita:
<?php
namespace Core;
class Dispatcher
{
public function getPage(Track $track)
{
...kode
return controller -> render(parameter);
}
}
?>
Gunakan kerangka saya untuk mengimplementasikan
kelas Dispatcher yang dijelaskan. Periksa cara kerjanya.
Jika mengalami kesulitan, lihat kode sumber
di file framework pembelajaran yang telah saya buat.