Для того чтобы приложение могло обрабатывать запросы, нам необходимо разработать схему роутинга. Для постоение шаблона маршрута будем использовать методы ядра.
Вообще, Prologue-framework можно роутить как угодно, есть десятки паттернов роутера которые использовались и тестировались на практике, но сейчас будет продемострирована оптимальная схема роутинга для веб-приложения.
Пишем маршрутизатор
<?php
defined('PROLOGUE__FRAMEWORK') or die ;
final Class BooksController extends PrController {
public function index() {
$this -> component('basic');
$this -> init(['router']);
}
protected function router() {
# Ограничеваем вложенность роута до 3 уровней (Классика) #
if ($this -> url(4)) {
$this -> error(404);
}
# построение шаблона роута #
$this -> rout -> set('/controller/method/value/');
}
}
Метод router()
В этом методе происходит постоение шаблона маршрута. Тут мы задаем правила, все что после первого / будет храниться в роутере с ключем controller, со вторым / ключ будет method ну и у url который идет после третьего слеш, ключ будет value
protected function router() {
# Ограничеваем вложенность роута до 3 уровней (Классика) #
if ($this -> url(4)) {
$this -> error(404);
}
# построение шаблона роута #
$this -> rout -> set('/controller/method/value/');
}
Инициализация метода
С помощью метода init() происходит инициализация других методов. Для того чтобы проинициализировать другие методы, необходимо в init() в качестве первого аргумента вставить массив с именами protected методов, и тогда все методы будут проинициализированны в том порядке, в котором вставленны в массив.
$this -> init(['router']);
Пример использования шаблона роутинга для сохранения книги
Ниже приведенный код отобразит на экране saveBook, если в браузере вбить url вашсайт.ру/books/save/
<?php
defined('PROLOGUE__FRAMEWORK') or die ;
final Class BooksController extends PrController {
public function index() {
$this -> component('basic');
$this -> init([
'router',
'saveBook']);
}
protected function router() {
# Ограничеваем вложенность роута до 3 уровней (Классика) #
if ($this -> url(4)) {
$this -> error(404);
}
# построение шаблона роута #
$this -> rout -> set('/controller/method/value/');
}
protected function saveBook() {
# если текущий url /books/save/ #
if ($this -> rout -> get('method') == 'save') {
echo 'saveBook';
}
}
}
Доработка saveBook()
Использование последнего ключа нашего шаблона. Работаем с ключем value. В примере это выглядет так - если существует $this -> rout -> get('value'), то мы будем сохранять уже существующую запись с переданным id. Если перейти по ссылке вашсайт.ру/books/save/1 ,то приложение выведет saveBook where id = 1 - это значит что мы готовимся изменить существующую запись. Если перейти по ссылке вашсайт.ру/books/save/ , то приложенее выведет saveBook new book - это значит что мы готовимся сохранять совершенно новую запись.
protected function saveBook() {
# если текущий url /books/save/ #
if ($this -> rout -> get('method') == 'save') {
# проверка на значение #
if ($this -> rout -> get('value')) {
# если value существует, то выполнится текущий блок кода #
echo 'saveBook where id = ' . $this -> rout -> get('value');
} else {
# если url по прежнему /books/save/ #
echo 'saveBook new book';
}
}
}