Ejemplo n.º 1
0
 /**
  * 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;
 }