Example #1
0
 /**
  * Контроллер или роут не найден, нужно ответить юзеру страницей 404.
  *
  * В конфиге должен быть прописан контроллер, который будет обрабатывать 404 ошибку. Если он не задан (пустая
  * строка), возвращаем 404-й заголовок и простой текст.
  *
  * Предохранитель для кодера: допустим, веб-сервер Apache и задан ErrorDocument. Но указанный адрес роутеру
  * неизвестен. Тогда роутер попытается ответить 404 (т.е. сюда попадет). А мы при этом реальный ответ веб-сервера
  * не подменяем и возвращаем текст по его коду.
  *
  * @throws ConfigException из parseHandler()
  */
 private function notFound()
 {
     // Предохранитель
     $code = http_response_code();
     if ($code > 400) {
         $msg = $code . ': ' . Response::textOf($code);
         if (isset($_SERVER['REDIRECT_URL'])) {
             $msg .= '<br>URL: ' . $_SERVER['REDIRECT_URL'];
         }
         Response::send($msg);
         App::end();
     }
     http_response_code(404);
     if ($handler = App::conf('router.404_handler', false)) {
         list($controller, $action) = $this->parseHandler($handler);
         $controller->{$action}();
     } else {
         Response::send('Неизвестный URL');
         App::end();
     }
 }