Phát triển Dispatcher trong MVC framework của riêng bạn
Hãy nhớ lại nội dung hiện tại của tệp index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// triển khai autoload của bạn
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>
Như bạn có thể thấy, hiện tại router của chúng ta trả về
đối tượng của lớp Track, chứa tên
controller, tên action và các tham số từ
chuỗi địa chỉ. Ngoài ra, trong bài học trước
chúng ta đã tạo parent cho tất cả các
controller.
Bây giờ chúng ta có thể thực hiện việc gọi
phương thức của controller, dữ liệu của nó
được chứa trong biến $track của chúng ta.
Việc này sẽ do một lớp đặc biệt Dispatcher đảm nhận.
Dispatcher sẽ nhận đối tượng của lớp Track
và theo dữ liệu của nó tạo ra đối tượng của lớp được chỉ định,
gọi phương thức của lớp đó, truyền
các tham số vào phương thức này.
Hãy thêm lệnh gọi dispatcher vào tệp index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// triển khai autoload của bạn
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
// Lệnh gọi dispatcher:
$page = ( new Dispatcher ) -> getPage($track);
?>
Việc gọi phương thức getPage của dispatcher chúng ta
sẽ gọi phương thức render của controller
và trả về những gì mà lệnh gọi phương thức đó trả về.
Như bạn đã biết từ bài học trước, phương thức
render của controller trả về đối tượng
lớp Page.
Đây là bản phác thảo của lớp Dispatcher của chúng ta:
<?php
namespace Core;
class Dispatcher
{
public function getPage(Track $track)
{
...code
return controller -> render(parameters);
}
}
?>
Sử dụng bản phác thảo của tôi, hãy triển khai lớp
Dispatcher đã được mô tả. Kiểm tra hoạt động của nó.
Nếu gặp khó khăn, hãy xem mã nguồn
trong các tệp của framework học tập do tôi tạo.