- Params renamed to Neuron

- add path atribute to Router req
- add viewPath param to View
This commit is contained in:
kj 2020-06-11 06:25:41 -04:00
parent 3d18ede54d
commit 02c0dbef50
3 changed files with 49 additions and 34 deletions

View File

@ -2,11 +2,11 @@
/* /*
* DuckBrain - Microframework * DuckBrain - Microframework
* *
* Params (nombre temporal, a falta de uno mejor), sirve para * Neuron, sirve para crear un objeto que alojará valores, pero
* crear un objeto con la característica especial de que al * además tiene la característica especial de que al intentar
* intentar acceder a un atributo que no está definido devolerá * acceder a un atributo que no está definido devolerá nulo en
* nulo en lugar de generar un error php notice que indica que * lugar de generar un error php notice que indica que se está
* se está intentando acceder a un valor no definido. * intentando acceder a un valor no definido.
* *
* El constructor recibe un objeto o arreglo con los valores que * El constructor recibe un objeto o arreglo con los valores que
* estarán definidos. * estarán definidos.
@ -18,7 +18,7 @@
namespace Libs; namespace Libs;
class Params { class Neuron {
private $data; private $data;

View File

@ -78,7 +78,7 @@ class Router {
* redirigidos a "https://ejemplo.com/duckbrain/docs". * redirigidos a "https://ejemplo.com/duckbrain/docs".
*/ */
public static function redirect($uri) { 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. * Solo se puede usar un middleware a la vez.
*/ */
public static function middleware($middleware){ public static function middleware($middleware){
if (!isset(self::$last)) return; if (!isset(static::$last)) return;
$method = self::$last[0]; $method = static::$last[0];
$index = self::$last[1]; $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 * json - Donde se encuentran los valores JSON enviados en el body
* *
*/ */
private static function params() { private static function getReq() {
$args = (object) ''; $req = (object) '';
$args->get = new Params($_GET); $req->get = new Neuron($_GET);
$args->post = new Params($_POST); $req->post = new Neuron($_POST);
$args->json = new Params(self::get_json()); $req->json = new Neuron(static::get_json());
return $args; $req->path = static::URIPath();
return $req;
} }
/* /*
@ -135,8 +136,8 @@ class Router {
* Devuelve un enlace estático * Devuelve un enlace estático
*/ */
public static function get($path, $callback) { public static function get($path, $callback) {
self::$get[] = self::parse($path, $callback); static::$get[] = static::parse($path, $callback);
self::$last = ['get', count(self::$get)-1]; static::$last = ['get', count(static::$get)-1];
return new static(); return new static();
} }
@ -153,14 +154,14 @@ class Router {
* Devuelve un enlace estático * Devuelve un enlace estático
*/ */
public static function post($path, $callback) { public static function post($path, $callback) {
self::$post[] = self::parse($path, $callback); static::$post[] = static::parse($path, $callback);
self::$last = ['post', count(self::$post)-1]; static::$last = ['post', count(static::$post)-1];
return new static(); return new static();
} }
public static function put($path, $callback) { public static function put($path, $callback) {
self::$put[] = self::parse($path, $callback); static::$put[] = static::parse($path, $callback);
self::$last = ['put', count(self::$put)-1]; static::$last = ['put', count(static::$put)-1];
return new static(); return new static();
} }
@ -177,11 +178,20 @@ class Router {
* Devuelve un enlace estático * Devuelve un enlace estático
*/ */
public static function delete($path, $callback) { public static function delete($path, $callback) {
self::$delete[] = self::parse($path, $callback); static::$delete[] = static::parse($path, $callback);
self::$last = ['delete', count(self::$put)-1]; static::$last = ['delete', count(static::$put)-1];
return new static(); 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. * Aplica los routers.
* *
@ -220,28 +230,27 @@ class Router {
* especificado anteriormente a la hora de recibirlos. * especificado anteriormente a la hora de recibirlos.
*/ */
public static function apply() { public static function apply() {
$uri = preg_replace('/'.preg_quote(self::baseURI(), '/').'/', $uri = static::URIPath();
'/', strtok($_SERVER['REQUEST_URI'], '?'), 1);
$routers = []; $routers = [];
switch ($_SERVER['REQUEST_METHOD']){ // Según el método selecciona un arreglo de routers configurados switch ($_SERVER['REQUEST_METHOD']){ // Según el método selecciona un arreglo de routers configurados
case 'POST': case 'POST':
$routers = self::$post; $routers = static::$post;
break; break;
case 'PUT': case 'PUT':
$routers = self::$put; $routers = static::$put;
break; break;
case 'DELETE': case 'DELETE':
$routers = self::$delete; $routers = static::$delete;
break; break;
default: default:
$routers = self::$get; $routers = static::$get;
break; break;
} }
foreach ($routers as $router) { // revisa todos los routers para ver si coinciden con la URI actual 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)){ if (preg_match_all('/^'.$router['path'].'\/?$/si',$uri, $matches)){
unset($matches[0]); unset($matches[0]);
$args = self::params(); $args = static::getReq();
if (isset($matches[1])) { // Caso 1 - Con pseudovariables por URI if (isset($matches[1])) { // Caso 1 - Con pseudovariables por URI
$params = []; $params = [];

View File

@ -22,10 +22,16 @@ class View {
* @param array $params * @param array $params
* Arreglo que podrá ser usado en la vista mediante $view ($param['index'] se usaría así: $view->index) * 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 = []) { public static function render($viewName, $params = [], $viewPath = null) {
$view = new Params($params); $view = new Neuron($params);
unset($params); unset($params);
if (isset($viewPath) && file_exists($viewPath.$viewName.'.php'))
return include($viewPath.$viewName.'.php');
include(ROOT_DIR.'/src/Views/'.$viewName.'.php'); include(ROOT_DIR.'/src/Views/'.$viewName.'.php');
} }
} }