add mising types, patch method and a new way to set middleware
- Removed resumed way to set controllers and middlewares: Now, the method of routers and middlewares need to be callables. - Add patch method in order to support PATCH http method. - Add a way to get add more middlewares after. For Example: <?php use Libs\Router; Router::get('/some-route', 'somefunction') ->middleware('firstmiddleware'); Router::get('/other-route', 'otherfunction'); // Recover first router and add a middleware Router::get('/some-route')->middleware('secondmiddleware'); ?>
This commit is contained in:
parent
af673a68b8
commit
030e1079dc
@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Router - DuckBrain
|
* Router - DuckBrain
|
||||||
*
|
*
|
||||||
@ -14,9 +14,10 @@
|
|||||||
namespace Libs;
|
namespace Libs;
|
||||||
|
|
||||||
class Router {
|
class Router {
|
||||||
private static $get = [];
|
private static $get = [];
|
||||||
private static $post = [];
|
private static $post = [];
|
||||||
private static $put = [];
|
private static $put = [];
|
||||||
|
private static $patch = [];
|
||||||
private static $delete = [];
|
private static $delete = [];
|
||||||
private static $last;
|
private static $last;
|
||||||
public static $notFoundCallback = 'Libs\Router::defaultNotFound';
|
public static $notFoundCallback = 'Libs\Router::defaultNotFound';
|
||||||
@ -43,7 +44,7 @@ class Router {
|
|||||||
* @param string $path
|
* @param string $path
|
||||||
* Ruta con pseudovariables.
|
* Ruta con pseudovariables.
|
||||||
*
|
*
|
||||||
* @param mixed $callback
|
* @param callable $callback
|
||||||
* Callback que será llamado cuando la ruta configurada en $path coincida.
|
* Callback que será llamado cuando la ruta configurada en $path coincida.
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
@ -51,7 +52,7 @@ class Router {
|
|||||||
* path - Contiene la ruta con las pseudovariables reeplazadas por expresiones regulares.
|
* path - Contiene la ruta con las pseudovariables reeplazadas por expresiones regulares.
|
||||||
* callback - Contiene el callback en formato Namespace\Clase::Método.
|
* callback - Contiene el callback en formato Namespace\Clase::Método.
|
||||||
*/
|
*/
|
||||||
private static function parse(string $path, $callback): array {
|
private static function parse(string $path, callable $callback): array {
|
||||||
preg_match_all('/{(\w+)}/s', $path, $matches, PREG_PATTERN_ORDER);
|
preg_match_all('/{(\w+)}/s', $path, $matches, PREG_PATTERN_ORDER);
|
||||||
$paramNames = $matches[1];
|
$paramNames = $matches[1];
|
||||||
|
|
||||||
@ -61,10 +62,6 @@ class Router {
|
|||||||
['([^\/]+)'],
|
['([^\/]+)'],
|
||||||
$path);
|
$path);
|
||||||
|
|
||||||
if (!is_callable($callback)) {
|
|
||||||
$callback = 'Controllers\\'.$callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'path' => $path,
|
'path' => $path,
|
||||||
'callback' => [$callback],
|
'callback' => [$callback],
|
||||||
@ -107,24 +104,19 @@ class Router {
|
|||||||
* Añade un middleware a la última ruta usada.
|
* Añade un middleware a la última ruta usada.
|
||||||
* Solo se puede usar un middleware a la vez.
|
* Solo se puede usar un middleware a la vez.
|
||||||
*
|
*
|
||||||
* @param mixed $callback
|
* @param callable $callback
|
||||||
* @param int $prioriry
|
* @param int $prioriry
|
||||||
*
|
*
|
||||||
* @return static
|
* @return static
|
||||||
* Devuelve un enlace estático.
|
* Devuelve la instancia actual.
|
||||||
*/
|
*/
|
||||||
|
public static function middleware(callable $callback, int $priority = null): static {
|
||||||
public static function middleware($callback, int $priority = null): static {
|
|
||||||
if (!isset(static::$last))
|
if (!isset(static::$last))
|
||||||
return new static();
|
return new static();
|
||||||
|
|
||||||
$method = static::$last[0];
|
$method = static::$last[0];
|
||||||
$index = static::$last[1];
|
$index = static::$last[1];
|
||||||
|
|
||||||
if (!is_callable($callback)) {
|
|
||||||
$callback = 'Middlewares\\'.$callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($priority) && $priority <= 0)
|
if (isset($priority) && $priority <= 0)
|
||||||
$priority = 1;
|
$priority = 1;
|
||||||
|
|
||||||
@ -171,22 +163,53 @@ class Router {
|
|||||||
return (object) '';
|
return (object) '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configura calquier método para todas las rutas.
|
||||||
|
*
|
||||||
|
* @param string $method
|
||||||
|
* Método http.
|
||||||
|
* @param string $path
|
||||||
|
* Ruta con pseudovariables.
|
||||||
|
* @param callable|null $callback
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* Devuelve la instancia actual.
|
||||||
|
*/
|
||||||
|
public static function configure(string $method, string $path, ?callable $callback = null): static {
|
||||||
|
if (is_null($callback)) {
|
||||||
|
$path = preg_quote($path, '/');
|
||||||
|
$path = preg_replace(
|
||||||
|
['/\\\{\w+\\\}/s'],
|
||||||
|
['([^\/]+)'],
|
||||||
|
$path);
|
||||||
|
|
||||||
|
foreach(static::$$method as $index => $router)
|
||||||
|
if ($router['path'] == $path) {
|
||||||
|
static::$last = [$method, $index];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new static();
|
||||||
|
}
|
||||||
|
|
||||||
|
static::$$method[] = static::parse($path, $callback);
|
||||||
|
static::$last = [$method, count(static::$$method)-1];
|
||||||
|
return new static();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define los routers para el método GET.
|
* Define los routers para el método GET.
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* Ruta con pseudovariables.
|
* Ruta con pseudovariables.
|
||||||
*
|
* @param callable $callback
|
||||||
* @param mixed $callback
|
|
||||||
* Callback que será llamado cuando la ruta configurada en $path coincida.
|
* Callback que será llamado cuando la ruta configurada en $path coincida.
|
||||||
*
|
*
|
||||||
* @return static
|
* @return static
|
||||||
* Devuelve un enlace estático.
|
* Devuelve la instancia actual.
|
||||||
*/
|
*/
|
||||||
public static function get(string $path, $callback): static {
|
public static function get(string $path, callable $callback = null): static {
|
||||||
static::$get[] = static::parse($path, $callback);
|
return static::configure('get', $path, $callback);
|
||||||
static::$last = ['get', count(static::$get)-1];
|
|
||||||
return new static();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -194,17 +217,14 @@ class Router {
|
|||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* Ruta con pseudovariables.
|
* Ruta con pseudovariables.
|
||||||
*
|
* @param callable $callback
|
||||||
* @param mixed $callback
|
|
||||||
* Callback que será llamado cuando la ruta configurada en $path coincida.
|
* Callback que será llamado cuando la ruta configurada en $path coincida.
|
||||||
*
|
*
|
||||||
* @return static
|
* @return static
|
||||||
* Devuelve un enlace estático.
|
* Devuelve la instancia actual.
|
||||||
*/
|
*/
|
||||||
public static function post(string $path, $callback): static {
|
public static function post(string $path, callable $callback = null): static {
|
||||||
static::$post[] = static::parse($path, $callback);
|
return static::configure('post', $path, $callback);
|
||||||
static::$last = ['post', count(static::$post)-1];
|
|
||||||
return new static();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -212,18 +232,30 @@ class Router {
|
|||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* Ruta con pseudovariables.
|
* Ruta con pseudovariables.
|
||||||
*
|
* @param callable $callback
|
||||||
* @param mixed $callback
|
|
||||||
* Callback que será llamado cuando la ruta configurada en $path coincida.
|
* Callback que será llamado cuando la ruta configurada en $path coincida.
|
||||||
*
|
*
|
||||||
* @return static
|
* @return static
|
||||||
* Devuelve un enlace estático
|
* Devuelve la instancia actual
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public static function put(string $path, $callback): static {
|
public static function put(string $path, callable $callback = null): static {
|
||||||
static::$put[] = static::parse($path, $callback);
|
return static::configure('put', $path, $callback);
|
||||||
static::$last = ['put', count(static::$put)-1];
|
}
|
||||||
return new static();
|
|
||||||
|
/**
|
||||||
|
* Define los routers para el método PATCH.
|
||||||
|
*
|
||||||
|
* @param string $path
|
||||||
|
* Ruta con pseudovariables.
|
||||||
|
* @param callable $callback
|
||||||
|
* Callback que será llamado cuando la ruta configurada en $path coincida.
|
||||||
|
*
|
||||||
|
* @return static
|
||||||
|
* Devuelve la instancia actual
|
||||||
|
*/
|
||||||
|
public static function patch(string $path, callable $callback = null): static {
|
||||||
|
return static::configure('patch', $path, $callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -231,17 +263,14 @@ class Router {
|
|||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* Ruta con pseudovariables
|
* Ruta con pseudovariables
|
||||||
*
|
|
||||||
* @param callable $callback
|
* @param callable $callback
|
||||||
* Callback que será llamado cuando la ruta configurada en $path coincida.
|
* Callback que será llamado cuando la ruta configurada en $path coincida.
|
||||||
*
|
*
|
||||||
* @return static
|
* @return static
|
||||||
* Devuelve un enlace estático
|
* Devuelve la instancia actual
|
||||||
*/
|
*/
|
||||||
public static function delete(string $path, $callback): static {
|
public static function delete(string $path, callable $callback = null): static {
|
||||||
static::$delete[] = static::parse($path, $callback);
|
return static::configure('delete', $path, $callback);
|
||||||
static::$last = ['delete', count(static::$delete)-1];
|
|
||||||
return new static();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -284,7 +313,10 @@ class Router {
|
|||||||
case 'PUT':
|
case 'PUT':
|
||||||
$routers = static::$put;
|
$routers = static::$put;
|
||||||
break;
|
break;
|
||||||
case 'DELETE':
|
case 'PATCH':
|
||||||
|
$routers = static::$patch;
|
||||||
|
break;
|
||||||
|
case 'DELETE':
|
||||||
$routers = static::$delete;
|
$routers = static::$delete;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user