Compare commits

...

7 Commits

Author SHA1 Message Date
kj
e9126e7cde Fix: Implicitly marking parameter as nullable is deprecated.
PHP 8.4 deprecation.
2025-06-07 14:27:47 -03:00
kj
7169d2cae3 Fix: render is not using the defined extension. 2025-06-07 14:17:11 -03:00
kj
66b2bc0d91 Remove unnecesary php close. 2025-06-07 14:14:16 -03:00
kj
c8ab2aa2cc Remove unnecesary echo. 2025-05-20 12:49:20 -03:00
kj
1e302a9ea7 BREAKING CHANGE: Change unnecesary false return type. 2025-04-19 15:44:16 -03:00
kj
d0d0d4dc76 Verify if a valid http query string after run parse_str. 2025-02-20 08:22:47 -03:00
kj
595e9c1316 Save body request as a property. 2025-02-20 08:22:37 -03:00
5 changed files with 82 additions and 81 deletions

View File

@ -18,4 +18,3 @@ foreach($routers as $file)
require_once($file); require_once($file);
\Libs\Router::apply(); \Libs\Router::apply();
?>

View File

@ -135,7 +135,6 @@ class Model {
$vars = json_encode(static::$queryVars); $vars = json_encode(static::$queryVars);
echo "<pre>";
throw new Exception( throw new Exception(
"\nError at query to database.\n" . "\nError at query to database.\n" .
"Query: $query\n" . "Query: $query\n" .
@ -450,7 +449,7 @@ class Model {
* @param string $operatorOrValue * @param string $operatorOrValue
* El operador o el valor a comparar como igual en caso de que $value no se defina. * El operador o el valor a comparar como igual en caso de que $value no se defina.
* *
* @param string $value * @param string|null $value
* (opcional) El valor a comparar en la columna. * (opcional) El valor a comparar en la columna.
* *
* @param bool $no_filter * @param bool $no_filter
@ -462,7 +461,7 @@ class Model {
public static function where( public static function where(
string $column, string $column,
string $operatorOrValue, string $operatorOrValue,
string $value = null, ?string $value = null,
bool $no_filter = false bool $no_filter = false
): static ): static
{ {
@ -483,7 +482,7 @@ class Model {
* @param string $operatorOrValue * @param string $operatorOrValue
* El operador o el valor a comparar como igual en caso de que $value no se defina. * El operador o el valor a comparar como igual en caso de que $value no se defina.
* *
* @param string $value * @param string|null $value
* (opcional) El valor el valor a comparar en la columna. * (opcional) El valor el valor a comparar en la columna.
* *
* @param bool $no_filter * @param bool $no_filter
@ -495,7 +494,7 @@ class Model {
public static function and( public static function and(
string $column, string $column,
string $operatorOrValue, string $operatorOrValue,
string $value = null, ?string $value = null,
bool $no_filter = false bool $no_filter = false
): static ): static
{ {
@ -524,7 +523,7 @@ class Model {
* @param string $operatorOrValue * @param string $operatorOrValue
* El operador o el valor a comparar como igual en caso de que $value no se defina. * El operador o el valor a comparar como igual en caso de que $value no se defina.
* *
* @param string $value * @param string|null $value
* (opcional) El valor el valor a comparar en la columna. * (opcional) El valor el valor a comparar en la columna.
* *
* @param bool $no_filter * @param bool $no_filter
@ -536,7 +535,7 @@ class Model {
public static function or( public static function or(
string $column, string $column,
string $operatorOrValue, string $operatorOrValue,
string $value = null, ?string $value = null,
bool $no_filter = false bool $no_filter = false
): static ): static
{ {
@ -606,7 +605,7 @@ class Model {
* @param string $operatorOrColumnB * @param string $operatorOrColumnB
* Operador o columna a comparar como igual para hacer el join en caso de que $columnB no se defina. * Operador o columna a comparar como igual para hacer el join en caso de que $columnB no se defina.
* *
* @param string $columnB * @param string|null $columnB
* (opcional) Columna a comparar para hacer el join. * (opcional) Columna a comparar para hacer el join.
* *
* @return static * @return static
@ -615,7 +614,7 @@ class Model {
string $table, string $table,
string $columnA, string $columnA,
string $operatorOrColumnB, string $operatorOrColumnB,
string $columnB = null ?string $columnB = null
): static ): static
{ {
if (is_null($columnB)) { if (is_null($columnB)) {
@ -640,7 +639,7 @@ class Model {
* @param string $operatorOrColumnB * @param string $operatorOrColumnB
* Operador o columna a comparar como igual para hacer el join en caso de que $columnB no se defina. * Operador o columna a comparar como igual para hacer el join en caso de que $columnB no se defina.
* *
* @param string $columnB * @param string|null $columnB
* (opcional) Columna a comparar para hacer el join. * (opcional) Columna a comparar para hacer el join.
* *
* @return static * @return static
@ -649,7 +648,7 @@ class Model {
string $table, string $table,
string $columnA, string $columnA,
string $operatorOrColumnB, string $operatorOrColumnB,
string $columnB = null ?string $columnB = null
): static ): static
{ {
if (is_null($columnB)) { if (is_null($columnB)) {
@ -674,7 +673,7 @@ class Model {
* @param string $operatorOrColumnB * @param string $operatorOrColumnB
* Operador o columna a comparar como igual para hacer el join en caso de que $columnB no se defina. * Operador o columna a comparar como igual para hacer el join en caso de que $columnB no se defina.
* *
* @param string $columnB * @param string|null $columnB
* (opcional) Columna a comparar para hacer el join. * (opcional) Columna a comparar para hacer el join.
* *
* @return static * @return static
@ -683,7 +682,7 @@ class Model {
string $table, string $table,
string $columnA, string $columnA,
string $operatorOrColumnB, string $operatorOrColumnB,
string $columnB = null ?string $columnB = null
): static ): static
{ {
if (is_null($columnB)) { if (is_null($columnB)) {
@ -824,12 +823,12 @@ class Model {
* @param string $search * @param string $search
* Contenido a buscar. * Contenido a buscar.
* *
* @param array $in * @param array|null $in
* (opcional) Columnas en las que se va a buscar (null para buscar en todas). * (opcional) Columnas en las que se va a buscar (null para buscar en todas).
* *
* @return static * @return static
*/ */
public static function search(string $search, array $in = null): static public static function search(string $search, ?array $in = null): static
{ {
if ($in == null) { if ($in == null) {
$className = get_called_class(); $className = get_called_class();

View File

@ -22,6 +22,7 @@ class Request extends Neuron {
public Neuron $params; public Neuron $params;
public string $path; public string $path;
public string $error; public string $error;
public string $body;
public array $next; public array $next;
/** /**
@ -37,16 +38,18 @@ class Request extends Neuron {
$this->put = new Neuron(); $this->put = new Neuron();
$this->patch = new Neuron(); $this->patch = new Neuron();
$this->delete = new Neuron(); $this->delete = new Neuron();
$this->body = file_get_contents("php://input");
$contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : ''; $contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : '';
if ($contentType === "application/json") if ($contentType === "application/json")
$this->json = new Neuron( $this->json = new Neuron(
(object) json_decode(trim(file_get_contents("php://input")), false) (object) json_decode(trim($this->body), false)
); );
else { else {
$this->json = new Neuron(); $this->json = new Neuron();
if (in_array($_SERVER['REQUEST_METHOD'], ['PUT', 'PATCH', 'DELETE'])) { if (in_array($_SERVER['REQUEST_METHOD'], ['PUT', 'PATCH', 'DELETE']) &&
parse_str(file_get_contents("php://input"), $input_vars); preg_match('/^[^;?\/:@&=+$,]{1,255}[=]/', $this->body, $matches)) { // Con la expresión regular verificamos que sea un http query string válido y evitamos errores de memoria en caso de que el body tenga algo más grande que eso.
parse_str($this->body, $input_vars);
$this->{strtolower($_SERVER['REQUEST_METHOD'])} = new Neuron($input_vars); $this->{strtolower($_SERVER['REQUEST_METHOD'])} = new Neuron($input_vars);
} }
} }
@ -91,7 +94,8 @@ class Request extends Neuron {
$error = 'Error: validation failed of '.preg_replace('/\./', ' as ', Validator::$lastFailed, 1); $error = 'Error: validation failed of '.preg_replace('/\./', ' as ', Validator::$lastFailed, 1);
} }
return static::onInvalid($error); static::onInvalid($error);
return false;
} }
/** /**
@ -135,12 +139,11 @@ class Request extends Neuron {
* *
* @param string $error * @param string $error
* *
* @return false * @return void
*/ */
public function onInvalid(string $error): false public function onInvalid(string $error): void
{ {
http_response_code(422); http_response_code(422);
print($error); print($error);
return false;
} }
} }

View File

@ -114,7 +114,7 @@ class Router {
* @return static * @return static
* Devuelve la instancia actual. * Devuelve la instancia actual.
*/ */
public static function middleware(callable $callback, int $priority = null): static public static function middleware(callable $callback, ?int $priority = null): static
{ {
if (!isset(static::$last)) if (!isset(static::$last))
return new static(); return new static();
@ -202,13 +202,13 @@ class Router {
* *
* @param string $path * @param string $path
* Ruta con pseudovariables. * Ruta con pseudovariables.
* @param callable $callback * @param callable|null $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 la instancia actual. * Devuelve la instancia actual.
*/ */
public static function get(string $path, callable $callback = null): static public static function get(string $path, ?callable $callback = null): static
{ {
return static::configure('get', $path, $callback); return static::configure('get', $path, $callback);
} }
@ -218,13 +218,13 @@ class Router {
* *
* @param string $path * @param string $path
* Ruta con pseudovariables. * Ruta con pseudovariables.
* @param callable $callback * @param callable|null $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 la instancia actual. * Devuelve la instancia actual.
*/ */
public static function post(string $path, callable $callback = null): static public static function post(string $path, ?callable $callback = null): static
{ {
return static::configure('post', $path, $callback); return static::configure('post', $path, $callback);
} }
@ -234,14 +234,14 @@ class Router {
* *
* @param string $path * @param string $path
* Ruta con pseudovariables. * Ruta con pseudovariables.
* @param callable $callback * @param callable|null $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 la instancia actual * Devuelve la instancia actual
*/ */
public static function put(string $path, callable $callback = null): static public static function put(string $path, ?callable $callback = null): static
{ {
return static::configure('put', $path, $callback); return static::configure('put', $path, $callback);
} }
@ -251,13 +251,13 @@ class Router {
* *
* @param string $path * @param string $path
* Ruta con pseudovariables. * Ruta con pseudovariables.
* @param callable $callback * @param callable|null $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 la instancia actual * Devuelve la instancia actual
*/ */
public static function patch(string $path, callable $callback = null): static public static function patch(string $path, ?callable $callback = null): static
{ {
return static::configure('patch', $path, $callback); return static::configure('patch', $path, $callback);
} }
@ -267,13 +267,13 @@ class Router {
* *
* @param string $path * @param string $path
* Ruta con pseudovariables * Ruta con pseudovariables
* @param callable $callback * @param callable|null $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 la instancia actual * Devuelve la instancia actual
*/ */
public static function delete(string $path, callable $callback = null): static public static function delete(string $path, ?callable $callback = null): static
{ {
return static::configure('delete', $path, $callback); return static::configure('delete', $path, $callback);
} }
@ -292,11 +292,11 @@ class Router {
/** /**
* Aplica la configuración de rutas. * Aplica la configuración de rutas.
* *
* @param string $path (opcional) Ruta a usar. Si no se define, detecta la ruta actual. * @param string|null $path (opcional) Ruta a usar. Si no se define, detecta la ruta actual.
* *
* @return void * @return void
*/ */
public static function apply(string $path = null): void public static function apply(?string $path = null): void
{ {
$path = $path ?? static::currentPath(); $path = $path ?? static::currentPath();
$routers = match($_SERVER['REQUEST_METHOD']) { // Según el método selecciona un arreglo de routers $routers = match($_SERVER['REQUEST_METHOD']) { // Según el método selecciona un arreglo de routers

View File

@ -17,14 +17,14 @@ class View extends Neuron {
* Incluye el archivo. * Incluye el archivo.
* *
* @param string $viewName Ruta relativa y el nommbre sin extensión del archivo. * @param string $viewName Ruta relativa y el nommbre sin extensión del archivo.
* @param string $viewPath (opcional) Ruta donde se encuentra la vista. * @param string|null $viewPath (opcional) Ruta donde se encuentra la vista.
* @param string $extension (opcional) Extensión del archivo. * @param string $extension (opcional) Extensión del archivo.
* *
* @return void * @return void
*/ */
protected function include( protected function include(
string $viewName, string $viewName,
string $viewPath = null, ?string $viewPath = null,
string $extension = 'php' string $extension = 'php'
): void ): void
{ {
@ -44,7 +44,7 @@ class View extends Neuron {
* *
* @param string $viewName Ruta relativa y el nommbre sin extensión del archivo. * @param string $viewName Ruta relativa y el nommbre sin extensión del archivo.
* @param array|Neuron $params (opcional) Arreglo que podrá ser usado en la vista mediante $view ($param['index'] se usaría así: $view->index) * @param array|Neuron $params (opcional) Arreglo que podrá ser usado en la vista mediante $view ($param['index'] se usaría así: $view->index)
* @param string $viewPath (opcional) 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/". * @param string|null $viewPath (opcional) 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/".
* @param string $extension (opcional) Extensión del archivo. * @param string $extension (opcional) Extensión del archivo.
* *
* @return void * @return void
@ -52,26 +52,26 @@ class View extends Neuron {
public static function render( public static function render(
string $viewName, string $viewName,
array|Neuron $params = [], array|Neuron $params = [],
string $viewPath = null, ?string $viewPath = null,
string $extension = 'php' string $extension = 'php'
): void ): void
{ {
$instance = new View($params); $instance = new View($params);
$instance->html($viewName, $viewPath); $instance->html($viewName, $viewPath, $extension);
} }
/** /**
* Renderiza las vistas HTML * Renderiza las vistas HTML
* *
* @param string $viewName Ruta relativa y el nommbre sin extensión del archivo ubicado en src/Views * @param string $viewName Ruta relativa y el nommbre sin extensión del archivo ubicado en src/Views
* @param string $viewPath (opcional) 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/". * @param string|null $viewPath (opcional) 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/".
* @param string $extension (opcional) Extensión del archivo. * @param string $extension (opcional) Extensión del archivo.
* *
* @return void * @return void
*/ */
public function html( public function html(
string $viewName, string $viewName,
string $viewPath = null, ?string $viewPath = null,
string $extension = 'php' string $extension = 'php'
): void ): void
{ {
@ -86,14 +86,14 @@ class View extends Neuron {
* Renderiza código CSS. * Renderiza código CSS.
* *
* @param string $viewName Ruta relativa y el nommbre sin extensión del archivo ubicado en src/Views * @param string $viewName Ruta relativa y el nommbre sin extensión del archivo ubicado en src/Views
* @param string $viewPath (opcional) 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/". * @param string|null $viewPath (opcional) 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/".
* @param string $extension (opcional) Extensión del archivo. * @param string $extension (opcional) Extensión del archivo.
* *
* @return void * @return void
*/ */
public function css( public function css(
string $viewName, string $viewName,
string $viewPath = null, ?string $viewPath = null,
string $extension = 'css' string $extension = 'css'
): void ): void
{ {
@ -105,14 +105,14 @@ class View extends Neuron {
* Renderiza código Javascript. * Renderiza código Javascript.
* *
* @param string $viewName Ruta relativa y el nommbre sin extensión del archivo ubicado en src/Views * @param string $viewName Ruta relativa y el nommbre sin extensión del archivo ubicado en src/Views
* @param string $viewPath (opcional) 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/". * @param string|null $viewPath (opcional) 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/".
* @param string $extension (opcional) Extensión del archivo. * @param string $extension (opcional) Extensión del archivo.
* *
* @return void * @return void
*/ */
public function js( public function js(
string $viewName, string $viewName,
string $viewPath = null, ?string $viewPath = null,
string $extension = 'js' string $extension = 'js'
): void ): void
{ {