ЭНЦИКЛОПЕДИЯ СОВРЕМЕННОГО САЙТОСТРОЕНИЯ

Помогите понять, где ошибка

Тема в разделе "Код PHP", создана пользователем bor10811, 25 апр 2018.

  1. bor10811

    bor10811 Веб-мастер

    Сообщения:
    66
    Рейтинг:
    31
    Пытаюсь разобраться с технологией MVC. Браузер выдаёт ошибку 500 (ошибка сервера)


    На сайте есть такие документы (соединены между собой):

    Код:
    http://karandash-konversii.ru/.htaccess
    
    В нём код такой:
    
    AddDefaultCharset CP1251
    
    RewriteEngine On
    
    RewriteBase /
    
    RewriteRule ^(.*)$ index.php
    
    
    http://karandash-konversii.ru/index.php
    
    В нём такой код:
    
    <?php
    
    ini_set('display_errore', 1);
    
    error_reporting(E_ALL);
    
    define('ROOT', dirname(__FILE__));
    
    require_once(ROOT.'/components/router.php');
    
    $router = new Router();
    
    $router->run();
    
    ?>
    
     
    
    http://karandash-konversii.ru/components/router.php
    
    В нём такой код:
    
    <?php
    
    class Router {
    
                    private $routes;
    
                    public function __construct() {
    
                                   $routesPath = ROOT.'/config/routes.php';
    
                                   $this->routes = include($routesPath);
    
                    }
    
                    private function getURI {
    
                                   if (!empty($_SERVER['REQUEST_URI'])) {
    
                                                   return trim($_SERVER['REQUEST_URI'], '/');
    
                                   }
    
                    }
    
                    public function run() {
    
                                   $uri = $this->getURI();
    
                                   foreach($this->routes as $uriPattern=>$path) {
    
                                                   if (preg_match("~$uriPattern~", $uri)) {
    
                                                                   $segments = explode('/', $path);
    
                                                                   $controllerName = array_shift($segments).'Controller';
    
                                                                   $controllerName  = ucfirst($controllerName);
    
                                                                   $actionName = 'action'.ucfirst(array_shift($segments));
    
                                                                   $controllerFile = ROOT.'/controllers/'.$controllerName.'.php';
    
                                                                   if (file_exists($controllerFile)) {
    
                                                                                  include_once($controllerFile);
    
                                                                   }
    
                                                                   $controllerObject = new $controllerName;
    
                                                                   $result = $controllerObject->$actionName();
    
                                                                   if ($result != null) {
    
                                                                                  break;
    
                                                                   }
    
                                                   }
    
                                   }
    
                    }
    
    }
    
    ?>
    
    
    http://karandash-konversii.ru/config/routes.php
    
    В нём такой код:
    
    <?php
    
    return array('news'=>'news/index', 'products'=>'product/list');
    
    ?>
    
     
    
    http://karandash-konversii.ru/controller/NewsController.php
    
    В нём такой код:
    
    <?php
    
    class NewsController {
    
                    public function actionIndex() {
    
                                   echo 'NewsController actionIndex';
    
                                   return true;
    
                    }
    
    }
    
    ?>
    
    
    http://karandash-konversii.ru/controller/ProductController.php
    
    В нём такой код:
    
    <?php
    
    class ProductController {
    
                    public function actionList() {
    
                                   echo 'ProductController actionList';
    
                                   return true;
    
                    }
    
    }
    
    ?>
    
    При этом замечу, что при переходе на другие файлы, браузер выдаёт ошибку 404, несмотря на то, что в файле .htaccess я сделал перенаправление при всех запросах на файл index.php. Может ошибка в этом документе?


    И ещё, я не совсем понимаю, как работает элемент «__FILE__» в строке:

    define('ROOT', dirname(__FILE__));

    Кто-нибудь знает, где можно достать информацию по этому элементу?
     
    Последнее редактирование модератором: 26 апр 2018
    #1
  2. Загрузка...
  3. Jonny

    Jonny Гуру Команда форума Администратор

    Сообщения:
    748
    Рейтинг:
    143
    Что за контроллеры у вас подключены? Какая CMS?
     
    #2
  4. bor10811

    bor10811 Веб-мастер

    Сообщения:
    66
    Рейтинг:
    31
    Это не CMS. Это самописный код, я его видел в одном из видео-курсов, он мне понравился, вот и решил попробовать. Контроллера всего два: NewsController.php и ProductController.php

    Есть ещё фронтконтроллер - index.php, роутер - router, файл с маршрутами - routes

    Вопрос с «__FILE__» решён, осталось понять, что с файлом .htaccess - в нём вроде всё правильно, регулярка предельно простая, остальные команды - тоже. Но перенаправление не работает, а может оно и не будет работать, если есть ошибки в php? Или php на работу .htaccess никак не влияет?
     
    #3