Задать вопрос
Umr001
@Umr001
php

Как правильно построить роутер php?

По мануалам получилось это. Но теперь как подключить css и js файлы во вью? Они подключатся, но не доступны, так как их обработка тоже идет через роутер. В результате получаем 404. Обрабатывает ли такой роутер гет и пост запросы? Подозреваю что нет. Где что почитать?
<?php

/*
Класс-маршрутизатор для определения запрашиваемой страницы.
> цепляет классы контроллеров и моделей;
> создает экземпляры контролеров страниц и вызывает действия этих контроллеров.
*/
class Route
{

  static function start()
  {
    // контроллер и действие по умолчанию
    $controller_name = 'Main';
    $action_name = 'index';
    
    $routes = explode('/', $_SERVER['REQUEST_URI']);

    // получаем имя контроллера
    if ( !empty($routes[1]) )
    {	
      $controller_name = $routes[1];
    }
    
    // получаем имя экшена
    if ( !empty($routes[2]) )
    {
      $action_name = $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))
    {
      // вызываем действие контроллера
      $controller->$action();
    }
    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');
    }
    
}
  • Вопрос задан
  • 293 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@antonowano
Профессиональный самоучка
В .htaccess
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы