/** * Importa ya sea modelos o vistas de la App en ejecución o * de otra. * * Para llamar modelos de otra aplicación. * * $this->import('model', 'otra_app.modelo'); * * Importar vistas de otras apps o de la misma. * * De la misma aplicación: * * $this->import('view', 'mi_vista'); * * Desde otra aplicación: * * $this->import('view', 'otra_app.mi_vista'); * * @param string $type * @param string $toImport */ public function import($type, $toImport) { $pathToImport = ''; $import = ''; // Valida si se esta importando de la misma App o de otra if (!strstr($toImport, '.')) { $pathToImport = App::getInstance()->getAppName(); } else { $importSegments = explode('.', $toImport); // Valida que la aplicación este cargada. if (App::getInstance()->exists($importSegments[0])) { $pathToImport = $importSegments[0]; $import = $importSegments[1]; } else { throw new ViewException("Error importing ({$type}) from ({$toImport})."); } } // Valida el tipo de objeto a importar if ($type === 'model') { $pathToImport .= 'models/' . $import; } elseif ($type === 'view') { $pathToImport .= 'views/' . $import; } else { throw new ViewException("Imported object type ({$type}) is invalid."); } Setup::importFromApp($pathToImport); }
} /* * Deshabilita la salida de errores por pantalla. */ ini_set('display_errors', 0); /* * Configura la zona horaria. */ date_default_timezone_set(Settings::getInstance()->get('timezone')); /* * Carga los alias. * Los alias de clases se definen en el archivo de configuraciones 'settings.php'. */ $aliases = Settings::getInstance()->get('aliases'); AliasLoader::getInstance($aliases)->register(); /* * Inicializa los requerimientos de ejecución. */ Setup::initialize(); /* * Carga las rutas. */ $routes = APPS_ROOT . '/routes.php'; if (file_exists($routes)) { require $routes; } /* * Todos los objeto propios del framework deberian validad que este define * exista de no ser haci es un ataque y se debe matar la ejecucion. */ define('FOREVERPHP_LOADED', microtime(true));
/** * Ejecuta la vista solicitada. * * @param mixed $route * @return void */ public function run($route) { if (!is_array($route)) { $this->makeResponse($route); } // Se separa la vista por ".", si es que la vista esta en subcarpetas // NOTA: En ForeverPHP los niveles de directorios se separan por "." $viewSegments = explode('.', $route['view']); // Nombre del metodo a ejecutar $method = $route['method']; Setup::toDefine('TEMPLATES_PATH', APPS_ROOT . DS . $this->appName . DS . 'Templates' . DS); Setup::toDefine('STATIC_PATH', APPS_ROOT . DS . 'static' . DS); $viewPath = ''; $view = $viewSegments[0]; if (count($viewSegments) > 1) { $view = $viewSegments[count($viewSegments) - 1]; // Se elimina el ultimo segmento de la vista, que es el nombre del archivo vista array_pop($viewSegments); // Se unen los segmentos de la vista con el separador de nombres de espacio $viewPath = implode('\\', $viewSegments); $viewPath .= '\\'; } // Verifico que la vista hereda de View if ($view instanceof \ForeverPHP\View\View) { throw new ViewException("La vista ({$view}) no hereda de View."); } // Creo la vista y la ejecuto y le asigno el request a la vista para manipulacion interna if (Settings::getInstance()->get('usingNamespaces')) { $view = '\\Apps\\' . $this->appName . '\\Views\\' . $viewPath . $view; } $v = new $view(); // Ejecuta la funcion y almacena su valor de retorno $returnValue = $v->{$method}(); // Se construye la respuesta $this->makeResponse($returnValue); }