Inicio
NexoPOS

Enrutamiento de módulos

Al registrar rutas, le indica a NexoPOS cómo puede llevar al usuario a sus rutas. El sistema de rutas utiliza la enrutación de Laravel. Aquí, solo cubriremos la especificidad necesaria para comprender cómo funcionan las rutas para los módulos.

Tipo de archivos de ruta

Cada módulo incluye 2 archivos dentro de la carpeta «Routes» que se utilizan para el enrutamiento:

  • api.php, que se supone que solo debe usarse para llamadas a la API. Aquí definirás tus endpoints de API.
  • web.php, lo que significa para todas las rutas que probablemente sean accesibles mediante acceso directo (GET) o mediante cualquier otro método regular. Cada ruta que lleve a una interfaz de usuario debe registrarse en un archivo web.php.

Se pueden encontrar más detalles aquí.

Diferencia entre rutas públicas y privadas (Panel)

Las rutas públicas probablemente estarán disponibles para el público. Estas rutas normalmente no usan «dashboard» como prefijo y, la mayor parte del tiempo, no requieren permisos para ser accesibles.

Las rutas privadas son rutas que usan “dashboard” como prefijo. Estas rutas son medios para ser rutas administrativas y diseñar todas las rutas que llevan a interfaces de paneles.

Declaración de ruta

Aquí registraremos una ruta que nos lleve a una página en el panel con un slug final «foobar».

<?php
use App\Modules\FooBar\Controllers\FooBarController;

Route::get( '/dashboard/foobar', [ FooBarController::class, 'index' ]);

Ten en cuenta que aquí estamos cargando un controlador que se supone que está registrado en la carpeta «Http/Controllers» con el nombre de archivo FooBarController.php.

Si quieres crear un controlador para tu módulo, aún puedes usar el comando:

php artisan modules:controller {module_namespace} {controller_class_name} 

Entonces, para crear un FooBarController como controlador, usaremos el siguiente comando:

php artisan modules:controller FooBar FooBarController

Protección de rutas con permisos

Así como puedes proteger menús con permisos, también puedes proteger rutas usando permisos. Aquí, definiremos el permiso en un middleware de la siguiente manera.

<?php
use App\Modules\FooBar\Controllers\FooBarController;
use App\MiddleWare\NsRestrictMiddleware;

Route::get( '/dashboard/foobar', [ FooBarController::class, 'index' ])
  ->middleware( 
      NsRestrictMiddleware::arguments([ 'can.fly' ])
  );

Aquí, el nombre del middleware que se debe usar es “NsRestrictMiddleware”, que acepta como parámetro el permiso (o una matriz de permisos) que necesitaremos para permitir el acceso a la ruta. En nuestro ejemplo, hemos usado “can.fly” como permiso.

Solicitando autenticación para ciertas rutas

Si desea proteger algunas rutas con autenticación, deberá adjuntar un middleware a esas rutas. Aquí tiene un ejemplo:

<?php

use App\Http\Middleware\Authenticate;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Support\Facades\Route;
use Modules\MyModule\Http\Controllers\MyModuleController;

Route::prefix( 'dashboard' )->group( function() {
    Route::middleware([
        SubstituteBindings::class,
        Authenticate::class, // <= will be accessible only if the user is authenticated.
    ])->group( function() {
        Route::get( '/my-module', [ MyModuleController::class, 'settingsPage' ]);
    });
});

Estamos aquí usando el middleware «Authenticate» para proteger las rutas definidas dentro del grupo. Ten en cuenta que también se requiere «SubstituteBindings» para asegurar que el enlace del modelo funcione para los módulos.