From 02c0dbef50ade4105aca031b75b55cfafa7af61c Mon Sep 17 00:00:00 2001 From: kj Date: Thu, 11 Jun 2020 06:25:41 -0400 Subject: [PATCH] - Params renamed to Neuron - add path atribute to Router req - add viewPath param to View --- src/Libs/{Params.php => Neuron.php} | 12 +++--- src/Libs/Router.php | 61 +++++++++++++++++------------ src/Libs/View.php | 10 ++++- 3 files changed, 49 insertions(+), 34 deletions(-) rename src/Libs/{Params.php => Neuron.php} (64%) diff --git a/src/Libs/Params.php b/src/Libs/Neuron.php similarity index 64% rename from src/Libs/Params.php rename to src/Libs/Neuron.php index 927b9f2..e25e626 100644 --- a/src/Libs/Params.php +++ b/src/Libs/Neuron.php @@ -2,11 +2,11 @@ /* * DuckBrain - Microframework * -* Params (nombre temporal, a falta de uno mejor), sirve para -* crear un objeto con la característica especial de que al -* intentar acceder a un atributo que no está definido devolerá -* nulo en lugar de generar un error php notice que indica que -* se está intentando acceder a un valor no definido. +* Neuron, sirve para crear un objeto que alojará valores, pero +* además tiene la característica especial de que al intentar +* acceder a un atributo que no está definido devolerá nulo en +* lugar de generar un error php notice que indica que se está +* intentando acceder a un valor no definido. * * El constructor recibe un objeto o arreglo con los valores que * sí estarán definidos. @@ -18,7 +18,7 @@ namespace Libs; -class Params { +class Neuron { private $data; diff --git a/src/Libs/Router.php b/src/Libs/Router.php index 8520357..9d2c9b5 100644 --- a/src/Libs/Router.php +++ b/src/Libs/Router.php @@ -78,7 +78,7 @@ class Router { * redirigidos a "https://ejemplo.com/duckbrain/docs". */ public static function redirect($uri) { - header('Location: '.self::baseURI().substr($uri,1)); + header('Location: '.static::baseURI().substr($uri,1)); } /* @@ -86,12 +86,12 @@ class Router { * Solo se puede usar un middleware a la vez. */ public static function middleware($middleware){ - if (!isset(self::$last)) return; + if (!isset(static::$last)) return; - $method = self::$last[0]; - $index = self::$last[1]; + $method = static::$last[0]; + $index = static::$last[1]; - self::$$method[$index]['middleware'] = 'Middlewares\\'.$middleware; + static::$$method[$index]['middleware'] = 'Middlewares\\'.$middleware; } /* @@ -102,12 +102,13 @@ class Router { * json - Donde se encuentran los valores JSON enviados en el body * */ - private static function params() { - $args = (object) ''; - $args->get = new Params($_GET); - $args->post = new Params($_POST); - $args->json = new Params(self::get_json()); - return $args; + private static function getReq() { + $req = (object) ''; + $req->get = new Neuron($_GET); + $req->post = new Neuron($_POST); + $req->json = new Neuron(static::get_json()); + $req->path = static::URIPath(); + return $req; } /* @@ -135,8 +136,8 @@ class Router { * Devuelve un enlace estático */ public static function get($path, $callback) { - self::$get[] = self::parse($path, $callback); - self::$last = ['get', count(self::$get)-1]; + static::$get[] = static::parse($path, $callback); + static::$last = ['get', count(static::$get)-1]; return new static(); } @@ -153,14 +154,14 @@ class Router { * Devuelve un enlace estático */ public static function post($path, $callback) { - self::$post[] = self::parse($path, $callback); - self::$last = ['post', count(self::$post)-1]; + static::$post[] = static::parse($path, $callback); + static::$last = ['post', count(static::$post)-1]; return new static(); } public static function put($path, $callback) { - self::$put[] = self::parse($path, $callback); - self::$last = ['put', count(self::$put)-1]; + static::$put[] = static::parse($path, $callback); + static::$last = ['put', count(static::$put)-1]; return new static(); } @@ -177,11 +178,20 @@ class Router { * Devuelve un enlace estático */ public static function delete($path, $callback) { - self::$delete[] = self::parse($path, $callback); - self::$last = ['delete', count(self::$put)-1]; + static::$delete[] = static::parse($path, $callback); + static::$last = ['delete', count(static::$put)-1]; return new static(); } + /* + * Devuelve el URI path actual + */ + + public static function URIPath() { + return preg_replace('/'.preg_quote(static::baseURI(), '/').'/', + '/', strtok($_SERVER['REQUEST_URI'], '?'), 1); + } + /* * Aplica los routers. * @@ -220,28 +230,27 @@ class Router { * especificado anteriormente a la hora de recibirlos. */ public static function apply() { - $uri = preg_replace('/'.preg_quote(self::baseURI(), '/').'/', - '/', strtok($_SERVER['REQUEST_URI'], '?'), 1); + $uri = static::URIPath(); $routers = []; switch ($_SERVER['REQUEST_METHOD']){ // Según el método selecciona un arreglo de routers configurados case 'POST': - $routers = self::$post; + $routers = static::$post; break; case 'PUT': - $routers = self::$put; + $routers = static::$put; break; case 'DELETE': - $routers = self::$delete; + $routers = static::$delete; break; default: - $routers = self::$get; + $routers = static::$get; break; } foreach ($routers as $router) { // revisa todos los routers para ver si coinciden con la URI actual if (preg_match_all('/^'.$router['path'].'\/?$/si',$uri, $matches)){ unset($matches[0]); - $args = self::params(); + $args = static::getReq(); if (isset($matches[1])) { // Caso 1 - Con pseudovariables por URI $params = []; diff --git a/src/Libs/View.php b/src/Libs/View.php index b034d52..ff4674a 100644 --- a/src/Libs/View.php +++ b/src/Libs/View.php @@ -22,10 +22,16 @@ class View { * @param array $params * Arreglo que podrá ser usado en la vista mediante $view ($param['index'] se usaría así: $view->index) * + * @param string $viewPath + * Ruta donde se encuentra la vista. En caso de que la vista no se encuentre en esa ruta, se usará la ruta por defecto "src/Views/". */ - public static function render($viewName, $params = []) { - $view = new Params($params); + public static function render($viewName, $params = [], $viewPath = null) { + $view = new Neuron($params); unset($params); + + if (isset($viewPath) && file_exists($viewPath.$viewName.'.php')) + return include($viewPath.$viewName.'.php'); + include(ROOT_DIR.'/src/Views/'.$viewName.'.php'); } }