route.php 2.3 KB

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