{% else-1 %}
Обновить | Подписаться | Поднять тему
Чтобы выполнить действие авторизируйтесь или пройдите регистрацию на сайте.
1. [автор] (11 сен 2015, 23:19) [0/0] [0] [отв] [спам] [под] +1 | -1

<?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;
?>

2.
oee1 * 0.01
(13 сен 2015, 10:56) [0/0] [0] [отв] [спам] [под] +1 | -1

if(!preg_match("/^([a-z0-9/]*)$/i", $this->url))
сомневаюсь что эта регулярка работает

  • 1 из 1
Чтобы писать сообщения авторизируйтесь или пройдите регистрацию на сайте.
Подписаны: 0
Скачать тему | Файлы темы | Фильтр сообщений