Applicazioni ColdBox

In questa pagina

Applicazioni ColdBox

bxSites coldbox documenta un'applicazione ColdBox a partire dalle sue convenzioni su disco: rotte, event handler, model e mapping WireBox, moduli, interceptor e task pianificati.

L'applicazione non viene mai avviata. Non serve compilare niente, nessuna datasource deve essere raggiungibile e nessuna variabile d'ambiente deve essere impostata, quindi il comportamento su un runner CI è identico a quello locale. Ciò che questo approccio non può vedere è elencato nei limiti, più sotto.

Avvio rapido

Dalla radice di un'app ColdBox che contiene anche un progetto bx-sites:

bxSites coldbox
bxSites build

Le pagine finiscono in docs/api/coldbox/. Se l'app sta altrove:

bxSites coldbox --appRoot=app

Configurazione

Tutto è opzionale; lo schema completo è in coldbox.

coldbox:
  appRoot: "."
  pagePathPrefix: api/coldbox
  tags: [ api, coldbox ]
  include: [ routes, handlers, models, modules, interceptors, scheduler ]
{
	"coldbox": {
		"appRoot": ".",
		"pagePathPrefix": "api/coldbox",
		"tags": [ "api", "coldbox" ],
		"include": [ "routes", "handlers", "models", "modules", "interceptors", "scheduler" ]
	}
}

[coldbox]
appRoot = "."
pagePathPrefix = "api/coldbox"
tags = [ "api", "coldbox" ]
include = [ "routes", "handlers", "models", "modules", "interceptors", "scheduler" ]

include decide quali gruppi di pagine generare; se ometti un valore quel gruppo viene saltato del tutto. Ogni chiave ha il suo flag:

bxSites coldbox --appRoot=app --include=routes,handlers \
	--pagePathPrefix=reference --tags=reference,api

Cosa viene generato

docs/api/coldbox/
├── index.md               # panoramica dell'app e conteggi
├── routes.md              # tutte le rotte, in ordine di dichiarazione
├── handlers/
│   ├── index.md
│   ├── Main.md
│   └── api/Orders.md      # gli handler di modulo stanno sotto il modulo
├── models/
│   ├── index.md           # model e i mapping del binder
│   └── UserService.md
├── modules/
│   ├── index.md
│   └── api.md
├── interceptors.md
└── scheduled-tasks.md

Rotte

Tutte le rotte dichiarate dal router dell'app e da ogni router di modulo, nell'ordine in cui sono dichiarate: ColdBox prende la prima che corrisponde, quindi l'ordine è significativo e la pagina lo conserva. resources()/apiResources() vengono espansi nelle singole rotte che ColdBox genera per essi, e le rotte di un modulo riportano l'entry point su cui sono effettivamente montate.

Handler

Una pagina per handler, con le rotte che lo raggiungono e l'azione che ognuna colpisce, poi le sue azioni raggiungibili con commenti di documentazione e argomenti. Gli hook del ciclo di vita di ColdBox (preHandler, aroundHandler, onError e affini) hanno una sezione propria invece di comparire tra le azioni raggiungibili via URL; init e i metodi privati restano fuori.

Model

Una pagina per model: il suo scope, cosa WireBox gli inietta, le sue proprietà e i suoi metodi pubblici. Le dipendenze iniettate sono separate dalle proprietà normali, perché property name="x" inject="y" è cablaggio, non dato. L'indice aggiunge i mapping dichiarati dal binder.

Moduli, interceptor e task pianificati

La pagina di un modulo riporta ciò che dichiara il suo ModuleConfig - autore, versione, entry point, dipendenze - e ciò che il modulo aggiunge all'applicazione, con ogni voce collegata alla pagina che la descrive. La pagina degli interceptor copre entrambi i modi in cui ColdBox li trova: ciò che registra config/ColdBox e ciò che dichiara interceptors/, con i metodi pubblici di ogni classe come i punti di intercettazione che sono. La pagina dei task legge config/Scheduler e quello di ogni modulo.

Pagine più ricche con DocBox

Rotte, moduli, interceptor e la forma dell'app derivano dalle sole convenzioni. Il dettaglio per classe - le azioni di un handler, i metodi di un model, i loro argomenti e commenti - arriva da DocBox, quindi installare bx-docbox rende quelle pagine molto più ricche:

install-bx-module bx-docbox

Senza di esso il verbo funziona comunque ed elenca ancora ogni handler, model, rotta e modulo; le pagine dicono semplicemente cosa manca e come ottenerlo.

Limiti

La lettura statica ha un limite netto, ed è meglio dichiararlo. Ciò che un'applicazione decide a runtime non è su disco:

  • Una rotta il cui pattern o target è costruito da una variabile, o registrata in un ciclo.
  • Un mapping WireBox o un task pianificato con nome calcolato.
  • Un modulo installato all'avvio invece che versionato sotto modules_app/.
  • Ciò che mapDirectory() registrerà davvero, che dipende da cosa c'è su disco all'avvio dell'app.

Tutto questo viene saltato invece che indovinato: una pagina generata preferisce dire meno che dire il falso.

Non disponibile da Gradle o Maven

Di proposito. Un'applicazione ColdBox si costruisce e si esegue con CommandBox, mai con uno strumento di build Java, quindi non esiste né un task bxSitesColdBoxDoc né un goal bxsites:coldbox. I plugin Gradle e Maven espongono invece il generatore DocBox, che documenta classi BoxLang/CFML realmente presenti nel progetto JVM in costruzione.

Modifica questa pagina Scarica Markdown Ultimo aggiornamento Sep 11, 2026, 7:11:15 PM