나만의 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']);
?>
보시다시피, 지금은 우리 라우터가
컨트롤러 이름, 액션 이름 및
주소 표시줄에서의 매개변수를 포함하는
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를 구현하세요. 작동을 확인하세요.
어려움이 있으면 제가 만든 학습용 프레임워크의
파일에서 소스 코드를 참고하세요.