Хоть как и писали выше, нет привычного роутинга, параметры можно легко добавить:
Надо внести такие изменения в класс route.php:
<?php
/*
Класс-маршрутизатор для определения запрашиваемой страницы.
> цепляет классы контроллеров и моделей;
> создает экземпляры контролеров страниц и вызывает действия этих контроллеров.
*/
class Route
{
static function start()
{
// контроллер и действие по умолчанию
$controller_name = 'Main';
$action_name = 'index';
// --------------------------------------------------
$action_params = array();
$routes = explode('/', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
// --^^------------------------------------------------
// получаем имя контроллера
if ( !empty($routes[1]) )
{
$controller_name = $routes[1];
}
// получаем имя экшена
if ( !empty($routes[2]) )
{
$action_name = $routes[2];
}
// --------------------------------------------------
if (count($routes)>2) {
$action_params = array_slice($routes, 2);
}
// --^^------------------------------------------------
// добавляем префиксы
$model_name = 'model_'.$controller_name;
$controller_name = 'controller_'.$controller_name;
$action_name = 'action_'.$action_name;
/*
echo "Model: $model_name <br>";
echo "Controller: $controller_name <br>";
echo "Action: $action_name <br>";
*/
// подцепляем файл с классом модели (файла модели может и не быть)
$model_file = strtolower($model_name).'.php';
$model_path = "application/models/".$model_file;
if(file_exists($model_path))
{
include "application/models/".$model_file;
}
// подцепляем файл с классом контроллера
$controller_file = strtolower($controller_name).'.php';
$controller_path = "application/controllers/".$controller_file;
if(file_exists($controller_path))
{
include "application/controllers/".$controller_file;
}
else
{
/*
правильно было бы кинуть здесь исключение,
но для упрощения сразу сделаем редирект на страницу 404
*/
Route::ErrorPage404();
}
// создаем контроллер
$controller = new $controller_name;
$action = $action_name;
if(method_exists($controller, $action))
{
// вызываем действие контроллера
// --------------------------------------------------
call_user_func_array(array($controller, $action), $action_params)
// --^^------------------------------------------------
}
else
{
// здесь также разумнее было бы кинуть исключение
Route::ErrorPage404();
}
}
function ErrorPage404()
{
$host = 'http://'.$_SERVER['HTTP_HOST'].'/';
header('HTTP/1.1 404 Not Found');
header("Status: 404 Not Found");
header('Location:'.$host.'404');
}
}
после этого можно строить любые роуты, согласно схемы:
http:// site.com / [controller] / [action] ( / параметр_1 ( / параметр_2 ( / .. ( / параметр_n))))
для того, чтобы использовать указанные параметры, надо в методе action-а, соответствующего контроллера указать их в сигнатуре, т.е. вот так:
class controller {
public function action($param_1, $param_2,...,$param_n) {
}
}
P.S. Код я не проверял, так что если будут ошибки, пиши их сюда, коллективный разум исправит :)