示例#1
0
 /**
  * Редирект с выходом из приложения.
  *
  * Прим.: указание абсолютного URL - требование спецификации HTTP/1.1,
  * {@link http://php.net/manual/ru/function.header.php}
  *
  * Быстрая справка по кодам с редиректом {@link http://php.net/manual/ru/function.header.php#78470}
  *
  * Хитрый редирект на основе комментария {@link http://php.net/manual/ru/function.headers-sent.php#60450}
  *
  * @param string $url  новый относительный адрес, с ведущим слешем
  * @param int    $code код ответа HTTP
  */
 public static function redirect($url, $code = 302)
 {
     $url = Env::domainUrl() . $url;
     if (!headers_sent()) {
         header('location:' . $url, true, $code);
     } else {
         echo "\n                <script type='text/javascript'>\n                    window.location.href='{$url}'\n                </script>\n                <noscript>\n                    <meta http-equiv='refresh' content='0; url={$url}'/>\n                </noscript>\n            ";
     }
     App::end();
 }
示例#2
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();
     }
 }