routes.php:
return array(
'ajax/delFile/([0-9]+)' => 'ajax/delFile/$1',
'ajax/delMessage/([0-9]+)' => 'ajax/delMessage/$1',
'ajax/addPost/([0-9]+)' => 'ajax/addPost/$1',
'ajax/addPost' => 'ajax/addPost',
'editMessage/([0-9]+)' => 'message/editMessage/$1',
'message/search' => 'message/searchMessage',
'logout' => 'logout/logout',
'ajax/register' => 'ajax/registerUser',
'ajax/login' => 'ajax/loginUser',
'sign-up' => 'signup/show',
'message/([0-9]+)' => 'message/show/$1',
'' => 'index/showAllMessages',
);
Router:
class Router
{
private $routes;
public function __construct()
{
$routesPath = __DIR__ . '/../../App/Config/routes.php';
$this->routes = require_once ($routesPath);
}
/**
* Получаем строку запроса
*
* @return bool|string Строка запроса, либо false если строка запроса отсутствует
*/
private function getURI()
{
if (!empty($_SERVER['REQUEST_URI'])) {
return trim(str_replace('mvcguestbook', '', $_SERVER['REQUEST_URI']), '/');
} else {
return false;
}
}
public function run()
{
$uri = $this->getURI();
//Проверяем наличие запроса в routes.php
foreach ($this->routes as $uriPattern => $path) {
//Ищем в URI совпадение с регулярным выражением uriPattern
if(preg_match("~$uriPattern~i", $uri)) {
//Формируем из URI внутренний маршрут
$internalRoute = preg_replace("~$uriPattern~i", $path, $uri);
//Определяем контроллер, экшн и параметры
$segments = explode('/', $internalRoute);
$controllerName = 'App\\Controllers\\' . ucfirst(array_shift($segments) . 'Controller');
$actionName = 'action'. ucfirst(array_shift($segments));
$controllerObject = new $controllerName;
$result = $controllerObject->$actionName($segments);
if ($result != null) {
break;
}
}
}
}
}
.htaccess:
AddDefaultCharset utf-8
RewriteEngine on
RewriteBase /mvcguestbook
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php