route.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. class Route
  3. {
  4. static function start()
  5. {
  6. // контроллер и действие по умолчанию
  7. $controller_name = 'Main';
  8. $action_name = 'index';
  9. $param1 = $param2 = null;
  10. $routes = explode('/', $_SERVER['REQUEST_URI']);
  11. // получаем имя контроллера
  12. if ( !empty($routes[1]) )
  13. {
  14. $controller_name = $routes[1];
  15. }
  16. // получаем имя экшена
  17. if ( !empty($routes[2]) )
  18. {
  19. $action_name = $routes[2];
  20. }
  21. // получаем параметр 1
  22. if ( !empty($routes[3]) )
  23. {
  24. $param1 = $routes[3];
  25. }
  26. // получаем параметр 2
  27. if ( !empty($routes[4]) )
  28. {
  29. $param1 = $routes[4];
  30. }
  31. // добавляем префиксы
  32. $model_name = 'Model_'.$controller_name;
  33. $controller_name = 'Controller_'.$controller_name;
  34. // подцепляем файл с классом модели (файла модели может и не быть)
  35. $model_file = strtolower($model_name).'.php';
  36. $model_path = "app/models/".$model_file;
  37. if(file_exists($model_path))
  38. {
  39. include "app/models/".$model_file;
  40. }
  41. // подцепляем файл с классом контроллера
  42. $controller_file = strtolower($controller_name).'.php';
  43. $controller_path = "app/controllers/".$controller_file;
  44. if(file_exists($controller_path))
  45. {
  46. include "app/controllers/".$controller_file;
  47. }
  48. else
  49. {
  50. /*
  51. правильно было бы кинуть здесь исключение,
  52. но для упрощения сразу сделаем редирект на страницу 404
  53. */
  54. Route::ErrorPage404();
  55. }
  56. // создаем контроллер
  57. $controller = new $controller_name;
  58. $action = $action_name;
  59. if(method_exists($controller, $action))
  60. {
  61. // вызываем действие контроллера
  62. $controller->$action($param1);
  63. }
  64. else
  65. {
  66. // здесь также разумнее было бы кинуть исключение
  67. Route::ErrorPage404();
  68. }
  69. }
  70. public static function ErrorPage404()
  71. {
  72. $host = '/';
  73. header('HTTP/1.1 404 Not Found');
  74. header("Status: 404 Not Found");
  75. header('Location: /404');
  76. }
  77. }