/** * Permet de lancer une erreur * @param $code le type de l'erreur, par défaut 404 (page not found) * @param $logs logs d'erreurs découpés de la forme * > $logs['error'] * > $logs['warning'] * > $logs['notice'] * @param $redirect indique s'il faut forcer la redirection (les logs ne seront pas transmis) */ public static function error($code = 404, $logs = array(), $redirect = false) { $logs = self::processLogs($logs); $error_filename = APP_PATH . '/Controllers/errorController.php'; if (file_exists($error_filename)) { $params = array('code' => $code, 'logs' => $logs); Minz_Response::setHeader($code); if ($redirect) { Minz_Request::forward(array('c' => 'error'), true); } else { Minz_Request::forward(array('c' => 'error', 'params' => $params), false); } } else { $text = '<h1>An error occured</h1>' . "\n"; if (!empty($logs)) { $text .= '<ul>' . "\n"; foreach ($logs as $log) { $text .= '<li>' . $log . '</li>' . "\n"; } $text .= '</ul>' . "\n"; } Minz_Response::setHeader($code); Minz_Response::setBody($text); Minz_Response::send(); exit; } }
/** * Démarre l'application (lance le dispatcher et renvoie la réponse */ public function run() { try { $this->dispatcher->run($this->useOb); Minz_Response::send(); } catch (Minz_Exception $e) { try { Minz_Log::record($e->getMessage(), Minz_Log::ERROR); } catch (Minz_PermissionDeniedException $e) { $this->killApp($e->getMessage()); } if ($e instanceof Minz_FileNotExistException || $e instanceof Minz_ControllerNotExistException || $e instanceof Minz_ControllerNotActionControllerException || $e instanceof Minz_ActionException) { Minz_Error::error(404, array('error' => array($e->getMessage())), true); } else { $this->killApp(); } } }
/** * Mets à jour le header de la Response * @param $code le code HTTP, valeurs possibles * - 200 (OK) * - 403 (Forbidden) * - 404 (Forbidden) * - 500 (Forbidden) -> par défaut si $code erroné * - 503 (Forbidden) */ public static function setHeader($code) { switch ($code) { case 200: self::$header = 'HTTP/1.0 200 OK'; break; case 403: self::$header = 'HTTP/1.0 403 Forbidden'; break; case 404: self::$header = 'HTTP/1.0 404 Not Found'; break; case 500: self::$header = 'HTTP/1.0 500 Internal Server Error'; break; case 503: self::$header = 'HTTP/1.0 503 Service Unavailable'; break; default: self::$header = 'HTTP/1.0 500 Internal Server Error'; } }
/** * Lance le controller indiqué dans Request * Remplit le body de Response à partir de la Vue * @exception Minz_Exception */ public function run($ob = true) { $cache = new Minz_Cache(); // Le ob_start est dupliqué : sans ça il y a un bug sous Firefox // ici on l'appelle avec 'ob_gzhandler', après sans. // Vraisemblablement la compression fonctionne mais c'est sale // J'ignore les effets de bord :( if ($ob) { ob_start('ob_gzhandler'); } if (Minz_Cache::isEnabled() && !$cache->expired()) { if ($ob) { ob_start(); } $cache->render(); if ($ob) { $text = ob_get_clean(); } } else { $text = ''; //TODO: Clean this code while (Minz_Request::$reseted) { Minz_Request::$reseted = false; try { $this->createController('FreshRSS_' . Minz_Request::controllerName() . '_Controller'); $this->controller->init(); $this->controller->firstAction(); $this->launchAction(Minz_Request::actionName() . 'Action'); $this->controller->lastAction(); if (!Minz_Request::$reseted) { if ($ob) { ob_start(); } $this->controller->view()->build(); if ($ob) { $text = ob_get_clean(); } } } catch (Minz_Exception $e) { throw $e; } } if (Minz_Cache::isEnabled()) { $cache->cache($text); } } Minz_Response::setBody($text); }