Enrutado
FacturaScripts almacena las rutas disponibles en el archivo MyFiles/routes.json
. Este archivo se actualiza automáticamente cada vez que se instala, desinstala o actualiza un plugin. También al reconstruir.
Enrutado automático
Por defecto FacturaScripts asigna una ruta a cada controlador, con el nombre del propio controlador. Por ejemplo: la ruta /ListProducto
ejecuta el controlador ListProducto.php
Rutas especiales
Existen algunas rutas especiales que añade directamente el kernel:
/api
: ejecuta la API./Core/Assets/*
: ejecuta el controlador Files./cron
: ejecuta el cron de cada plugin./deploy
: reconstruye la carpeta Dinamic y el archivo de rutas, siempre que no exista ya el directorio Dinamic./Dinamic/Assets/*
: ejecuta el controlador Files./install
: ejecuta el instalador./login
: ejecuta el formulario de login./MyFiles/*
: ejecuta el controlador Myfiles, que filtra que no se accedan a archivos confidenciales sin el correspondiente token de autorización./node_modules/*
: ejecuta el controlador Files./Plugins/*
: ejecuta el controlador Files.
Enrutado manual
Pero también podemos añadir rutas personalizadas llamando directamente a Kernel::addRoute(). Por ejemplo, vamos a hacer que el controlador ListProducto.php
también se ejecute para la ruta /productos
:
use FacturaScripts\Core\Kernel;
Kernel::addRoute('/productos', 'ListProducto');
Si queremos hacer esto en nuestro plugin, lo ideal es colocar esta llamada en la función init()
del archivo Init.php del plugin. También podemos añadir una función a ejecutar cada vez que se reconstruya el archivo de rutas, por ejemplo para tener más control:
Kernel::addRoutes(function () {
// tu código aquí
// por ejemplo, puedes leer de una tabla y después, para cada registro, llamar a la función addRoute()
// Kernel::addRoute(...);
});
Prioridades en las rutas
Podemos controlar las prioridades en las rutas, es decir, que una ruta tenga preferencia sobre otra, con el tercer parámetro, position
: por defecto es 0. Las rutas se ordenan de menor posición a mayor. Si pones un número mayor, la ruta va después de todas las rutas con posición 0, y si pones un número menor, va antes que el resto.
Kernel::addRoute('/productos/*', 'ProductoController'); // esta ruta va primero
Kernel::addRoute('/productos/mios/*', 'MiProductoController'); // esta ruta va después
En este ejemplo, cuando accedamos a la ruta /productos/mios/1
se ejecutará el controlador ProductoController
, porque esa ruta es compatible y se ha añadido antes. Si queremos que la segunda ruta se evalúe antes, podemos ponerle una posición -1:
Kernel::addRoute('/productos/*', 'ProductoController');
Kernel::addRoute('/productos/mios/*', 'MiProductoController', -1); // esta ruta va antes que el resto
Ahora al entrar en la ruta /productos/mios/1
se ejecutará el controlador MiProductoController
, ya que esa ruta se ha añadido con una posición anterior a la primera. Recuerda: las rutas se ordenan de menor a mayor posición.