Skip to content

9.1.0 - Nuevo sistema de rutas, nuevo sistema de inyección de servicios y nuevo CLI. Correcciones y mejoras.

Choose a tag to compare

@osumionline osumionline released this 07 Oct 13:23
· 159 commits to main since this release

Varios cambios en esta versión:

Nuevo sistema de rutas

En lugar de utilizar un archivo Urls.php, ahora se ha añadido un sistema de rutas más en la línea de Laravel. En la carpeta src/Routes se podrá crear un archivo que incluya las rutas de la aplicación. Se pueden crear tantos archivos como se quiera, por módulos, funcionalidades...

En estos archivos se añadirán comandos con los que crear las rutas:

ORoute::group('/api', 'json', function() {
  ORoute::get('/get-date',     GetDateAction::class);
  ORoute::get('/get-user/:id', GetUserAction::class);
  ORoute::get('/get-users',    GetUsersAction::class);
});

Con la clase ORoute ahora se pueden definir rutas definiendo también el método a usar en las llamadas (ahora dará un error si el método usado no es el correcto). La sintaxis de estos comandos es la siguiente:

ORoute::{método}({url}, {acción a ejecutar}, {lista de filtros}, {tipo de respuesta}, {lista de otras opciones});

También se pueden crear grupos de URLs que compartan características comunes usando los siguientes comandos:

  • group: permite definir prefijo del grupo y tipo de respuesta.
  • prefix : permite definir el prefijo del grupo.
  • type: permite definir el tipo de respuesta del grupo.

Nuevo sistema de inyección de servicios

Inspirado en la inyección de dependencias de Angular, ahora ya no es necesario definir los servicios a utilizar en cada acción a la hora de definir las rutas, sino que se crean en las propias acciones:

<?php declare(strict_types=1);

namespace Osumi\OsumiFramework\App\Module\Api\GetDate;

use Osumi\OsumiFramework\Routing\OAction;
use Osumi\OsumiFramework\Web\ORequest;
use Osumi\OsumiFramework\App\Service\UserService;

class GetDateAction extends OAction {
	private ?UserService $us = null;

	public string $date = '';

	public function __construct() {
		$this->us = inject(UserService::class);
	}

	/**
	 * Function used to obtain current date
	 *
	 * @param ORequest $req Request object with method, headers, parameters and filters used
	 * @return void
	 */
	public function run(ORequest $req):void {
		$this->date = $this->us->getLastUpdate();
	}
}

Este nuevo sistema de inyección crea un singleton por cada servicio, de modo que si se almacena algo en un servicio y hay algún otro servicio que haga uso de él, también puede hacer uso de ello. De esta manera se optimiza el uso de los servicios y se permite compartir información.

Nuevo CLI

El CLI que se accede mediante el comando php of ha sido completamente modificado adoptando la estructura de una clase donde queda todo mejor definido. A partir de esta versión cambia la forma de usar los parametros que se pasan a las distintas tareas, usando parametros por nombre (--{clave} valor). De este modo el orden de los parametros es intercambiable y las tareas pueden usar campos con nombre en lugar de tener que usar indices:

// Antes
php of add action Api/GetUser /api/get-user json

// Ahora
php of add --option action --name Api/GetUser --url /api/get-user --type json

Varios breaking changes que van perfilando esta nueva versión 9 hacia una estructura y uso más profesional.