Движок для сайта

Самые важные настройки файла .htaccess #Установка кодировки AddDefaultCharset utf-8 # Редиректы с www на без www Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteCond %{REQUEST_URI} !robots.txt RewriteRule ^(.*)$ http://%1/$1 [R=301,L] #Редиректы на корень сайта RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !index.php RewriteCond %{REQUEST_URI} !robots.txt RewriteRule ^.+$ /$1 [QSA,L] В index.php первым делом устанавливаем константу абсолютного пути и подключаем файл аутолоадера

  // константа абсолютного пути
  define('ROOT', dirname(__FILE__));
  
  require_once ROOT."/components/Autoload.php";
  

  // Вызов Router
  $router = new \components\Router();
  $router->run();
  
  ob_end_flush();
  
Файл роутера:

namespace components;

/**
* Класс Router
* Компонент для работы с маршрутами
*/
class Router
{

  /**
  * Свойство для хранения массива роутов
  * @var array
  */
  private $routes;

  /**
  * Конструктор
  */
  public function __construct()
  {
    // Путь к файлу с роутами
    $routesPath = ROOT . '/config/routes.php';

    // Получаем роуты из файла
    $this->routes = include($routesPath);
  }



  /**
  * Возвращает строку запроса
  */
  private function getURI(){
		if(!empty($_SERVER['REQUEST_URI'])){
			//return $_SERVER['REQUEST_URI'];
            
			return trim($this->escapeStr($_SERVER['REQUEST_URI'], 77), '/');
		}
	}
  
  
  
  function escapeStr($str, $size = 0)
  {
    $str = trim($str);
    $str = preg_replace('/[`\'"\(\)\<\>\]\[\}\{\\\\]/', '', $str);
    $str = htmlentities($str, ENT_QUOTES, "UTF-8");
    if($size) $str = mb_substr($str, 0, $size, "UTF-8");
    return $str;
  }
  
  

  /**
  * Метод для обработки запроса
  */
  public function run()
  {
    // Получаем строку запроса
    $uri = $this->getURI();

    // Проверяем наличие такого запроса в массиве маршрутов (routes.php)
    foreach($this->routes as $uriPattern => $path)
    {

      // Сравниваем $uriPattern и $uri
      if(preg_match("~$uriPattern~", $uri))
      {

        // Получаем внутренний путь из внешнего согласно правилу
        $internalRoute = preg_replace("~$uriPattern~", $path, $uri);

        // Определить контроллер, action, параметры
        $segments      = explode('/', $internalRoute);

        $controllerName= array_shift($segments) . 'Controller';
        $controllerName= ucfirst($controllerName);

        $actionName    = 'action' . ucfirst(array_shift($segments));

        $parameters    = $segments;

        // Подключить файл класса - контроллера
        $controllerFile = ROOT . '/controllers/' .
        $controllerName . '.php';

        if(file_exists($controllerFile))
        {
          include_once($controllerFile);
        }

        $controllerName = "\\controllers\\$controllerName";

        // Создать объект, вызвать метод (т.е. action)
        $controllerObject = new $controllerName;

        /* Вызываем необходимый метод ($actionName) у определенного
        * класса ($controllerObject) с заданными ($parameters) параметрами
        */
        $result = call_user_func_array(array($controllerObject,$actionName), $parameters);

        // Если метод контроллера успешно вызван, завершаем работу роутера
        if ($result != null) {
          break;
        }
      }
    }
  }
}

Когда определена функция и сам контроллер который будет обрабатывать строку запроса, в самом конроллере создаётся экземпляр класса Model, в котором содержатся все основные функции соединения с БД, выборки используя подготовленные запросы PDO и другие методы. Контроллер выбирает нужные данные из БД и передаёт их в файл вида (view). Все файлы видов, css, js, картинки - всё лежит в папке template. При MVC используются только абсолютные пути к файлам. Скачать с гитхаб

30.03.2017

714
A B i U S JS

PHP HTML CSS
Чат
    Для входа только имэйл или имя и апроль
    Можно сменить аватар
    Имэйл Ваше имя
    Пароль