Чтоб было немного понятнее, как это чудо работает, разберу следующее. К примеру нам надо обработать следующие роуты:
/article - список статей
/article/view - статья
POST /article - создать статью
PUT /article/id - редактировать статью
DELETE /article/id - удалить статью
В первую очередь важно понять, что функция route это "фабрика", а не процедура. Она использует ваши правила роутинга и создает роутер, который эти правила применяет:
$router = route(
... // Правила роутинга
);
// Выполнение роутинга
$router(
... // Все параметры роутера передаются напрямую в правила роутинга
);Второе важное замечание, правила роутинга делятся на "условия" и "контроллеры". Условия определяют, в верном ли направлении движется роутинг, а контроллеры обрабатывают запрос:
$router = route(
route(
preg_match('~^/article/view~', $path) == 1, // Условие
function(){ // Контроллер
return 'Статья';
}
),
... // Следующие варианты роутинга
);В качестве условия может выступать функция, а не логическое выражение, что делает решение еще более гибким:
$router = route(
route(
function(){
return preg_match('~^/article/view~', $path) == 1; // Условие
},
function(){ // Контроллер
return 'Статья';
}
),
... // Следующие варианты роутинга
);Вложенные условия позволяют разделить роутер:
$router = route(
... // Роутинг статьи
// Следующий вариант роутинга
route(
preg_match('~^/article~', $_SERVER['REQUEST_URI']) == 1,
// Вложенный роутинг
route(
$_SERVER['REQUEST_METHOD'] == 'POST',
function(){
return 'Создание статьи';
}
),
route(
$_SERVER['REQUEST_METHOD'] == 'GET',
function(){
return 'Список статей';
}
),
...
)
);