Início
NexoPOS

Roteamento de Módulos

Ao registrar rotas, você permite que o NexoPOS saiba como levar o usuário até as suas rotas. O sistema de rotas usa o Laravel Routing. Aqui, vamos apenas abordar a especificidade necessária para entender como as rotas funcionam para os módulos.

Tipo de Arquivos de Rota

Cada módulo vem com 2 arquivos na pasta “Routes” que são usados para o roteamento:

  • api.php, que deve ser usado apenas para chamadas de API. Aqui você definirá seus endpoints de API.
  • web.php, o que significa para todas as rotas que provavelmente ficarão acessíveis por acesso direto (GET) ou por qualquer outro método regular. Todas as rotas que levam a uma interface (UI) devem ser registradas em um arquivo web.php.

Mais detalhes podem ser encontrados aqui.

Diferença entre Rotas Públicas e Privadas (Painel)

As Rotas Públicas provavelmente estarão disponíveis para o público. Essas rotas geralmente não usam “dashboard” como prefixo e, na maior parte do tempo, não exigem permissões para serem acessadas.

As Rotas Privadas são rotas que usam “dashboard” como prefixo. Essas rotas são meios de serem rotas administrativas e de definir todas as rotas que levam às interfaces do dashboard.

Declarando Rota

Aqui, vamos registrar uma rota que nos leva a uma página no painel com um slug final “foobar”.

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

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

Note que aqui estamos carregando um controller que deve estar registrado na pasta “Http/Controllers” com o nome de arquivo FooBarController.php.

Se você quiser criar um controller para o seu módulo, ainda pode usar o comando:

php artisan modules:controller {module_namespace} {controller_class_name} 

Para criar um FooBarController como um controller, usaremos o seguinte comando:

php artisan modules:controller FooBar FooBarController

Protegendo Rotas com Permissão

Assim como você pode proteger menus com permissões, você também pode proteger rotas usando permissões. Aqui, vamos definir a permissão em um middleware assim.

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

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

Aqui, o nome do middleware a usar é “NsRestrictMiddleware”, que aceita como parâmetro a permissão (ou um array de permissões) que exigiremos para permitir o acesso à rota. No nosso exemplo, usamos “can.fly” como permissão.

Solicitando Autenticação para Rotas Específicas

Se você quiser proteger algumas rotas com autenticação, será necessário anexar um middleware a essas rotas. Aqui está um exemplo:

<?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 aqui usando o middleware “Authenticate” para proteger as rotas definidas dentro do grupo. Observe que “SubstituteBindings” também é necessário para garantir que o model binding funcione para os módulos.