/** * Mostramos la página de error según el tipo de error del que se trate. * * Por defecto se disponen de tan solo 2 errores. 404 y 500. * Estás páginas aplican el modelo de sobreescritura de las vistas y se * ubican en internal/error/$number.php * Donde $number es el numero del error. * Además enviamos una variable $debug para informar si es desarrollo o * producción. * * Los errores internos del PHP y las excepciones se mapean automáticamente * a la correspondiente vista. * * @param mixed $description Descripcion del error. * @param int $number Numero del error, por defecto 500. * @param array $extended Información adicional sobre el error. */ public static function show_error($description, $number = 500, $extended = NULL) { // Estamos mostrando un error. self::$has_error = TRUE; // Cargamos la vista. $view = View::factory('internal/error/' . $number); // Seteamos entorno $view->assign('debug', self::$debug); // Seteamos las variables base $view->assign('descripcion', NULL); $view->assign('backtrace', NULL); $view->assign('source', NULL); // Comprobamos el marco de trabajo. if (self::$debug) { // Mostramos una pantalla de error para depurar. // Agregamos la descripción. $view->assign('descripcion', $description); // Obtenemos la información util que encontremos en $extended. if (is_array($extended)) { // Buscamos bracktrace. if (isset($extended['backtrace'])) { $view->assign('backtrace', $extended['backtrace']); } // Buscamos información para mostra el código fuente. if (isset($extended['file']) && isset($extended['line'])) { $view->assign('source', self::show_source_error(7, $extended['line'], $extended['file'], self::arr_get($extended, 'reflection', NULL))); } } } else { // Mostramos una pantalla de error para el usuario en modo produccion. // Es producción $view->assign('debug', FALSE); // Agregamos la descripción del error. $view->assign('descripcion', $description); } // Cargo template. $template = View::factory('internal/template'); // Asigno datos. try { $template->assign('contenido', $view->parse()); } catch (Exception $e) { die('ERROR ' . $e->getCode() . ': ' . $e->getMessage()); } $template->assign('number', $number); // Mostramos la pantalla de error. try { $template->show(); } catch (Exception $e) { die('ERROR ' . $e->getCode() . ': ' . $e->getMessage()); } // Terminamos la ejecución exit; }