Skip to content

Conversation

@Dasc3er
Copy link
Contributor

@Dasc3er Dasc3er commented Oct 18, 2025

Aggiunge routing attraverso Laravel e API Platform per gestire API e caricamento pagine,

  • Le API sono gestite con DTO di ingresso e uscita e documentate automaticamente tramite OpenAPI
  • Le pagine normali permettono di definire percorsi personalizzati

L'autenticazione è da sistemare, impostata di base per le pagine normali tramite un semplice utilizzo della sessione impostata da OSM di base. Ciò funziona solo in modalità 2) di cui sotto, altrimenti il sistema blocca l'accesso tramite middleware.

I nuovi percorsi sono accessibili in 2 modi:

  1. Usando php artisan serve, che avvia un server PHP su public/
  2. Usando un normale server PHP per lo sviluppo
  1. Permette di usare nativamente i percorsi registrati, che saranno disponibili come /info e /api (e /api/custom). Ciò blocca i file pre-esistenti del resto del gestionale.
image
  1. Permette di usare il gestionale normalmente, e di avere i nuovi percorsi nella sottocartella public/ -> public/info, ....
    Per far l'UI Swagger di default, è però necessario copiare manualmente i contenuti da vendor\api-platform\laravel\public a vendor\api-platform nella root del proprio webserver (problemi di caricamento CSS e JS).

Queste modifiche sono utili per diminuire le dipendenze su file core.php ed evitare require/include tra file, e iniziare il trasferimento al sistema object oriented.

Si può disabilitare l'accesso a public via htaccess e procedere con lo sviluppo. per evitare di abbandonare le modifiche.

I primi commit della PR sono modifiche alle funzioni di base necessarie per compatibilità con Laravel (redirect -> redirect_url, base_path -> base_path_osm, ...). Ultimo rebase al 2025-11-01.

ConsiderazioniI:

  • APIPlatfrom è piuttosto stretto sulle operazioni (vedasi implementazione per Impostazioni)
    • Usare DTO (classi con le strutture e tipi) per input e output
    • Operazioni di Get sono "provider" (=retrieve)
    • Operazioni di Post sono "processor" (=create)
    • Operazioni di Put hanno bisogno di provider e processor (=update)
    • Operazioni di GetCollection sono le uniche che possono restituire liste in modo semplificato
    • Attenzione a restituire array/liste dirette, meglio usare mappe se necessario - GetCollection è l'unico sistema che supporta bene le liste ma solo a livello root della risposta
  • Nuova impostazione api_development definisce se l'API è protetta o meno da autenticazione, lasciare a true solo per sviluppo locale
  • Mancano le operazioni di setup per Laravel, ovvero copiare .env.example al file .env e poi eseguire php artisan key:generate

La connessione per l'UI è parzialmente impostata tramite:

  • Nuovi script di setup (update-openapi-client), che estraggono la definizione OpenAPI e generano il client dinamicamente
  • Nuovo endpoint api-for-ui, disponibile solo per utenti autenticati, che automaticamente inoltra la richiesta per l'API con i token necessari di autenticazione (per evitare di renderli disponibili a livello HTML)

Nessuna sezione del gestionale usa questo nuovo client per ora.

var defaultClient = API.ApiClient.instance;
defaultClient.basePath = 'http://localhost/openstamanager/public/api-for-ui'

var api = new API.DataTablesResourceApi()
var idModule = "74"; // {String} DataTablesResource identifier
var idPlugin = "0"; // {String} DataTablesResource identifier
var idParent = "0"; // {String} DataTablesResource identifier
var dataTablesResourceDataTablesLoadRequest = new API.DataTablesResourceDataTablesLoadRequest(); // {DataTablesResourceDataTablesLoadRequest} The new DataTablesResource 
api.apiApidatatableslistIdModuleIdPluginIdParentPost(idModule, idPlugin, idParent, dataTablesResourceDataTablesLoadRequest, (error, data, response) => {
  if (error) {
    console.error(error);
  } else {
    console.log('API called successfully. Returned data: ' + data);
  }
});

This structure allows easy overriding of operations via the custom folder system

// modules\impostazioni\custom\src\API\Controllers\GetImpostazioneProviderRedo.php

namespace Modules\Impostazioni\API\Controllers;

use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ProviderInterface;
use Models\Setting;
use Modules\Impostazioni\API\ImpostazioneResource;
use ApiPlatform\Metadata\Get;

#[
    Get(
        uriTemplate: "/impostazione/{id}",
        provider: GetImpostazioneProviderRedo::class,
    ),
]
final class GetImpostazioneProviderRedo implements ProviderInterface
{
    public function provide(
        Operation $operation,
        array $uriVariables = [],
        array $context = [],
    ): ?array {
        return ["id" => "111"];
    }
}

@Dasc3er Dasc3er force-pushed the laravel-routing branch 2 times, most recently from 66f7aa0 to 19b993c Compare October 19, 2025 08:57
@lucasalva87 lucasalva87 added this to the v2.10 milestone Oct 22, 2025
@Dasc3er Dasc3er force-pushed the laravel-routing branch 2 times, most recently from 01f68a8 to 49097d6 Compare November 1, 2025 08:13
@Dasc3er
Copy link
Contributor Author

Dasc3er commented Nov 26, 2025

Discusso con @loviuz , si procede al merge per ulteriori test e affinamento della funzionalità.

@Dasc3er Dasc3er merged commit f4abfa2 into devcode-it:master Nov 26, 2025
1 of 2 checks passed
@Dasc3er Dasc3er mentioned this pull request Nov 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants