public function make() { $data = array(); if (is_array($this->content)) { $data = $this->content; } else { // Obtiene los datos del contexto $data = Context::all(); } header('HTTP/1.0 ' . $this->statusCode . ' ' . Response::getResponseStatus($this->statusCode), true, $this->statusCode); header('Content-type: application/json; charset: ' . $this->charset); header('Accept-Charset: ' . $this->charset); // Comienza la captura del buffer de salida ob_start(); // Retorna los datos en formato JSON echo json_encode($data); }
/** * Permite mostrar un excepción propia. * * @param string $type * @param string $message * @return void */ private static function viewException($type, $message) { $template = 'exception'; $title = 'Excepción'; // 1 es Error if ($type === 1) { $title = 'Error'; } if (Settings::getInstance()->inDebug()) { $contentBuffer = json_decode(ob_get_contents()); // Limpio el buffer de salida previo if (ob_get_length()) { ob_clean(); } Context::useGlobal(false); Context::set('exception', $title); Context::set('details', $message); $response = new Response(); if (is_array($contentBuffer)) { $contentBuffer['ForeverPHPException'] = Context::all(); $response->json($contentBuffer)->make(); } else { // Si hay buffer de salida previo cambio el template if (ob_get_length() != 0) { $template = 'exception-block'; } // Le indico a la vista que haga render usando los templates del framework Settings::getInstance()->set('ForeverPHPTemplate', true); $response->render($template)->make(); } } else { // Termino el buffer de salida y lo limpio ob_end_clean(); // Redirijo a un error 500 return Redirect::error(500); } }
public function make() { $data = array(); // Valido el token CSRF, el cual solo esta disponible en GET o POST //if (Settings::getInstance()->inDebug()) { if (Settings::getInstance()->exists('csrfToken')) { if (!CSRF::validateToken()) { throw new SecurityException('Access denied, invalid token. It becomes impossible to process your request to start or close this page.'); } } /*} else { Redirect::toError(500); }*/ // Obtienen los contextos $data = Context::all(); // Se limpian los contextos Context::removeAll(); // Valida si el render solo esta disponible en DEBUG //if ($only_debug) { // Router::redirectToError(500); //} else { $tplEngine = Settings::getInstance()->get('templateEngine'); if ($tplEngine == 'chameleon') { $tpl = new Chameleon(); } // Comienza la captura del buffer de salida ob_start(); // Se construye la ruta del template $templatesDir = ''; $staticDir = ''; $templatePath = ''; $appAndTemplate = null; // Se definen las rutas de los templates y de los archivos estaticos if (Settings::getInstance()->get('ForeverPHPTemplate')) { // Se usaran templates de foreverPHP $templatesDir = FOREVERPHP_TEMPLATES_PATH; $staticDir = str_replace(DS, '/', FOREVERPHP_STATIC_PATH); } else { $templatesDir = TEMPLATES_PATH; $staticDir = str_replace(DS, '/', STATIC_PATH); } $tpl->setTemplatesDir($templatesDir); // Verifica si el template maneja aplicacion diferente y subdirectorios if (strpos($this->template, '@')) { $appAndTemplate = explode('@', $this->template); } if ($appAndTemplate != null) { $templatesDir = APPS_ROOT . DS . $appAndTemplate[0] . DS . 'Templates' . DS; $this->template = $appAndTemplate[1]; } $subdirectories = explode('.', $this->template); $totalSubdirectories = count($subdirectories); if ($totalSubdirectories > 1) { $this->template = $subdirectories[$totalSubdirectories - 1]; array_pop($subdirectories); foreach ($subdirectories as $subdirectory) { $templatesDir .= $subdirectory . DS; } } else { $this->template = $subdirectories[0]; } // Se define la ruta del template $templatePath = $templatesDir . $this->template; // Le indico al motor de templates la ruta de los archivos estaticos $tpl->setStaticDir($staticDir); // Renderea el template echo $tpl->render($templatePath, $data); /* * Aca se controla el cache de templates. */ if (ob_get_length() > 0) { if ($this->usingCache) { // Obtiene el contenido del template renderizado $cacheValue = ob_get_contents(); // POR AHORA SOLO GUARDA EL CACHE PARA PRUEBAS NO VALIDA DURACION, NI SI EXISTE // Guarda el template en el cache Cache::set($this->template . '.template.cache', $cacheValue); } } //} // Rendereo el template //echo $this->_template->render($template, $data); /* * Guardo en la configuracion el estado de la vista para evitar * conflictos, por ejemplo intentar acceder a la session despues de * haber rendereado. */ // NOTA: al paracer esto ya no es necesario, validar despues Settings::getInstance()->set('viewState', 'render_ok'); }