Passa al contenuto principale

Estensibilità

In alcuni casi, potresti aver bisogno di altre estensioni per estendere la tua estensione.

Backend

Le estensioni estendono il backend di Flarum Core tramite due meccanismi:

Non a caso, puoi rendere estensibile la tua estensione tramite gli stessi meccanismi.

Eventi personalizzati

Per conoscere gli eventi di dispatching e definirne di nuovi, consultare la documentazione pertinente.

Extenders Personalizzati

Diciamo che hai sviluppato un'estensione che aggiunge un driver di ricerca alternativo a Flarum, ma vuoi consentire ad altre estensioni di aggiungere il supporto per filtri personalizzati/ordinamento. Un estensore personalizzato potrebbe essere un la via giusta da seguire.

L'implementazione degli extender è in realtà abbastanza semplice. Queste sono le 3 fasi principali:

  1. Vari metodi (e il costruttore) consentono al codice client di specificare le opzioni. Per esempio:
  • Quale modello/controller API/validatore dovrebbe essere esteso?
  • Quali modifiche si dovrebbero apportare?
  1. Un metodo extend prende l'input dal passaggio 1, e lo applica modificando varie container bindings e variabili statiche globali per ottenere l'effetto desiderato. Questa è la "implementazione" del composer. I metodi extend per tutte le estensioni abilitate vengono eseguiti come parte del processo di avvio di Flarum.
  2. Facoltativamente, gli extender che implementano Flarum\Extend\LifecycleInterface possono avere i metodi onEnable e onDisable, che vengono eseguiti quando le estensioni che usano l'extender sono abilitate/disabilitate, e sono utili per attività come la cancellazione di varie cache.

Di conseguenza, per creare un estensore personalizzato, tutto ciò che devi fare è:

  1. Definire una classe che implementa Flarum\Extend\ExtenderInterface.
  2. Definire argomenti nel costruttore, e vari metodi. Tali metodi dovrebbero rappresentare "modifiche" concrete.
  3. Implementa un metodo extend che modifica l'estensione (o Flarum), tipicamente estendendo/modificando i binding del container.
  4. Facoltativamente, implementa Flarum\Extend\LifecycleInterface se è necessaria una pulizia su enable/disable.

Before designing your own extenders, we HIGHLY recommend looking through the implementations of core's extenders.

tip

Gli estensori personalizzati introdotti dalla tua estensione dovrebbero essere considerati API pubbliche. È possibile aggiungere test automatici tramite il nostro pacchetto di test backend.

:::cautela

Gli estensori personalizzati NON devono essere usati per eseguire logiche arbitrarie durante il processo di avvio di Flarum. Questo è un lavoro per il Service Providers. Un modo semplice per controllare: se stai usando gli estensori che hai definito nella tua estensione, probabilmente stai facendo qualcosa di sbagliato.

:::

Frontend

Se vuoi che altre estensioni siano in grado di utilizzare classi o funzioni definite nella tua estensione (riutilizzare o modificare tramite gli utils extend/override), dovrai esportarli nell'indice di index.js (tipicamente lo stesso luogo in cui si trova il tag initializer della tua estensione).

Per esempio:

app.initializers.add('your-extension-id', () => {
// Il codice della tua estensione andrà qui
})

export {
// Tutto ciò che vuoi esportare invece andrà qui.
}