<?php
class router
{
private $url = "";
protected $rController = "", $rMethod = "", $rParams = "";
public function __construct()
{
// Удаляем слеши для правильной работы
$this->url = trim($_SERVER['REQUEST_URI'], "/"
// Запрещаем всё кроме букв, цыфр и слеша
if(!preg_match("/^([a-z0-9\/]*)$/i", $this->url))
header("HTTP/1.x 404 Not Found"
// Разделяем адрес для получения контроллера и метода
$this->url = explode("/", $this->url);
// Если контроллер не указан, задаем стандартный
if(!$this->url[0])
$controller = "main";
else
$controller = $this->url[0];
// Проверка на существование подобного файла
$cFile = ROOT.'/app/controllers/'.$controller.'_controller.php';
if(!file_exists($cFile))
header("HTTP/1.x 404 Not Found"
// Указываем конечное имя файла
$controller = $controller."_controller";
// Проверка на существование метода
if(!$this->url[1])
$method = "index";
else
$method = $this->url[1];
// Есть ли в контроллере такой метод
if(!method_exists($controller, $method))
header("HTTP/1.x 404 Not Found"
// Собираем все параметры
if($this->url[2])
{
for($i = 2; $i <= count($this->url); $i++)
{
$this->rParams .= '/'.$this->url[$i];
}
$this->rParams = trim($this->rParams, "/"
}
// Собираем всё что у нас есть и отпраевляем клиенту
$this->rController = new $controller;
$this->rController->$method($this->rParams);
}
}
?>
Написал "пилотный" роутер, что лучше заменить или упросить? Работает!
Добавлено 11.09.15 в 23:20:36:
Вызывается в индексе
<?php
new router;
?>
if(!preg_match("/^([a-z0-9/]*)$/i", $this->url))
сомневаюсь что эта регулярка работает