За последние 24 часа нас посетили 17846 программистов и 1597 роботов. Сейчас ищет 971 программист ...

Uncaught Error: Call to undefined method Error::loadModel()

Тема в разделе "PHP для новичков", создана пользователем iwarhill, 27 ноя 2019.

  1. iwarhill

    iwarhill Новичок

    С нами с:
    16 ноя 2018
    Сообщения:
    2
    Симпатии:
    0
    Проблема такая. Когда я перехожу по несуществующей ссылке например: localhost/url меня перекидывает на страницу которая выводится если страница не найдена. Тут все нормально. Но когда я перехожу по ссылке localhost/error выскакивает ошибка. На php 5.6 ошибок нет все работает. Ошибка появляется только на php 7.

    Fatal error: Uncaught Error: Call to undefined method Error::loadModel()

    PHP:
    1. <?php
    2. class Bootstrap
    3. {
    4.     private $_url = null;
    5.     private $controller = null;
    6.     private $modelFolder = MODELS_PATH;
    7.     private $controllerFolder = CONTROLLERS_PATH;
    8.     private $errorFile = 'error.php';
    9.     private $indexFile = 'index.php';
    10.     public function init()
    11.     {
    12.         $this->getFromUrl();
    13.         if (empty($this->_url[0]))
    14.         {
    15.             $this->loadIndexController();
    16.             return false;
    17.         }
    18.        
    19.         $this->loadExistingController();
    20.         $this->callControllerMethod();
    21.     }
    22.     public function setControllerFolder($folder)
    23.     {
    24.         $this->controllerFolder = trim($folder, '/') . '/';
    25.     }
    26.     public function setModelFolder($folder)
    27.     {
    28.         $this->modelFolder = trim($folder, '/') . '/';
    29.     }
    30.     public function setErrorFile($folder)
    31.     {
    32.         $this->errorFile = trim($folder, '/');
    33.     }
    34.     public function setIndexFile($folder)
    35.     {
    36.         $this->indexFile = trim($folder, '/');
    37.     }
    38.     private function getFromUrl()
    39.     {
    40.         $url = $_GET['url'] ?? null;
    41.         $url = rtrim($url, '/');
    42.         $url = filter_var($url, FILTER_SANITIZE_URL);
    43.         $this->_url = explode('/', $url);
    44.     }
    45.     private function loadIndexController()
    46.     {
    47.         require $this->controllerFolder . $this->indexFile;
    48.         $this->controller = new Index();
    49.         $this->controller->index();
    50.     }
    51.     private function loadExistingController()
    52.     {
    53.         $file = $this->controllerFolder . $this->_url[0] . '.php';
    54.         if (file_exists($file))
    55.         {
    56.             require $file;
    57.             $this->controller = new $this->_url[0];
    58.             $this->controller->loadModel($this->_url[0], $this->modelFolder);
    59.         }
    60.         else
    61.            
    62.         {
    63.             $this->error();
    64.             return false;
    65.         }
    66.     }
    67.     private function callControllerMethod()
    68.     {
    69.         $length = count($this->_url);
    70.         if ($length > 1)
    71.         {
    72.             if (!method_exists($this->controller, $this->_url[1]))
    73.             {
    74.                 $this->error();
    75.             }
    76.         }
    77.         switch ($length)
    78.         {
    79.             case 5:
    80.             $this->controller->{$this->_url[1]}($this->_url[2], $this->_url[3], $this->_url[4]);
    81.             break;
    82.             case 4:
    83.             $this->controller->{$this->_url[1]}($this->_url[2], $this->_url[3]);
    84.             break;
    85.             case 3:
    86.             $this->controller->{$this->_url[1]}($this->_url[2]);
    87.             break;
    88.             case 2:
    89.             $this->controller->{$this->_url[1]}();
    90.             break;
    91.             default:
    92.             $this->controller->index();
    93.             break;
    94.         }
    95.     }
    96.     private function error()
    97.     {
    98.         require $this->controllerFolder . $this->errorFile;
    99.         $this->controller = new ErrorController();
    100.         $this->controller->error404();
    101.         exit;
    102.     }
    103. }
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.576
    Симпатии:
    1.759
    Потому что в 7.0 появился класс Error стандартный. Вот поэтому надо пользоваться namespace