- 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
*
* 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
* estarán definidos.
@ -18,7 +18,7 @@
namespace Libs;
class Params {
class Neuron {
private $data;

View File

@ -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 = [];

View File

@ -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');
}
}