დისპეტჩერის შემუშავება საკუთარ 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. შეამოწმეთ მისი მუშაობა.
სირთულეების შემთხვევაში იხილეთ საწყისი კოდი
ჩემს მიერ შექმნილი სასწავლო ფრეიმვორქის ფაილებში.