АКЦЫЯ: бясплатныя месячныя курсы па стварэнні сайтаў
на выбар: вёрстка, JavaScript, PHP, Python або фрэймворкі. Сёння апошні дзень для запісу! Націскай!
⊗ppMVDFmDs 29 of 35 menu

Распрацоўка дыспетчара ў сваім 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']); ?>

Як вы бачыце, пакуль у нас наш router вяртае аб'ект класа 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. Праверце яго працу. Пры цяжкасцях паглядзіце зыходны код у файлах зробленага мной вучэбнага фрэймворку.

byenru