Faire une page de configuration de plugin
De nombreux plugins ont besoin d'une page de configuration pour permettre à l'utilisateur de paramétrer — par exemple la clé d'API d'un service tiers, l'URL d'un webhook, etc. Cet exemple montre comment créer une page de configuration de plugin complète avec pluginSettingsManager + composant React + ctx.api.
Cet exemple n'utilise pas FlowEngine ; il combine simplement Plugin + Router + Component + Context.
Il est conseillé de connaître les contenus suivants pour faciliter le développement :
- Écrire votre premier plugin — création d'un plugin et structure du répertoire
- Plugin — point d'entrée du plugin et cycle de vie
load() - Router — enregistrement de page de configuration via
pluginSettingsManager - Développement de composants Component — écriture de composants React et useFlowContext
- Internationalisation i18n — écriture des fichiers de traduction et utilisation de
useT()
Résultat final
Nous allons créer une page de configuration « Configuration du service externe » :
- Apparaît dans le menu « Configuration des plugins »
- Utilise un Form Antd pour l'UI
- Lit et sauvegarde la configuration via
ctx.api - Affiche un message après sauvegarde réussie

Code source complet : @nocobase-example/plugin-settings-page. Pour le faire tourner directement en local :
Construisons ce plugin pas à pas, à partir de zéro.
Étape 1 : créer le squelette du plugin
À la racine du dépôt :
Cela génère la structure de fichiers de base sous packages/plugins/@my-project/plugin-settings-page, incluant src/client-v2/, src/server/, src/locale/ et autres répertoires. Voir Écrire votre premier plugin pour les détails.
Étape 2 : enregistrer la page de configuration
Modifiez src/client-v2/plugin.tsx ; dans load(), enregistrez la page de configuration via this.pluginSettingsManager. En deux étapes : d'abord addMenuItem() pour l'entrée de menu, puis addPageTabItem() pour la page elle-même :
Une fois enregistrée, l'entrée « Configuration du service externe » apparaîtra dans le menu « Configuration des plugins », avec deux onglets en haut — « Configuration de l'API » et « À propos ». Lorsque le menu n'a qu'une page, la barre d'onglets est masquée automatiquement ; ici nous avons enregistré deux pages, elle s'affiche donc. this.t() utilise automatiquement le nom du package du plugin courant comme namespace i18n. Voir Context → Capacités courantes pour les détails.

Étape 3 : écrire le composant de la page de configuration
Créez src/client-v2/pages/ExternalApiSettingsPage.tsx. La page de configuration est simplement un composant React standard ; nous utilisons ici Form et Card d'Antd pour l'UI, useFlowContext() pour récupérer ctx.api afin d'interagir avec le back-end, et useT() pour la traduction.
Quelques points clés :
useFlowContext()— importé depuis@nocobase/flow-engine, donne accès àctx.apiet autres capacités du contexteuseT()— hook de traduction importé depuislocale.ts, déjà lié au namespace du plugin. Voir Internationalisation i18n pour les détailsuseRequest()— depuis ahooks, gère les états loading/error des requêtes.manual: truesignifie pas d'envoi automatique : il faut appelerrun()manuellementctx.api.request()— utilisation identique à Axios, NocoBase ajoute automatiquement les informations d'authentification
Étape 4 : ajouter les fichiers de traduction
Modifiez les fichiers de traduction sous src/locale/ du plugin :
L'ajout initial des fichiers de langue nécessite un redémarrage de l'application pour prendre effet.
Pour l'écriture des fichiers de traduction, le hook useT(), tExpr() et plus d'utilisations, voir Internationalisation i18n.
Étape 5 : API serveur
Le formulaire client a besoin de deux endpoints externalApi:get et externalApi:set côté serveur. La partie serveur est simple : on définit une table de données pour stocker la configuration et on enregistre deux endpoints.
Définir la table de données
Créez src/server/collections/externalApiSettings.ts. NocoBase chargera automatiquement les définitions de collections de ce répertoire :
Enregistrer les ressources et les endpoints
Modifiez src/server/plugin.ts ; enregistrez la ressource via resourceManager.define() puis configurez les permissions ACL :
Quelques points clés :
ctx.db.getRepository()— récupère l'objet d'opération sur les données via le nom de collectionctx.action.params.values— données du body pour les requêtes POSTacl.allow()—'loggedIn'signifie que tout utilisateur connecté peut accéder. L'endpointsetn'a pas d'autorisation explicite : par défaut, seul l'administrateur peut l'appelerawait next()— chaque action doit l'appeler à la fin, c'est la convention des middlewares Koa
Étape 6 : écrire la page « À propos »
À l'étape 2, nous avons enregistré deux onglets ; la page « Configuration de l'API » est déjà écrite à l'étape 3. Écrivons maintenant la page de l'onglet « À propos ».
Créez src/client-v2/pages/AboutPage.tsx :
Cette page est simple — elle utilise Descriptions d'Antd pour afficher les informations du plugin. Dans un projet réel, l'onglet « À propos » peut servir à afficher la version, le changelog, des liens d'aide, etc.
Étape 7 : activer le plugin
Une fois activé, rafraîchissez la page : l'entrée « Configuration du service externe » apparaîtra dans le menu « Configuration des plugins ».

Code source complet
- @nocobase-example/plugin-settings-page — exemple complet de page de configuration de plugin
Récapitulatif
Capacités utilisées dans cet exemple :
Liens connexes
- Écrire votre premier plugin — créer le squelette d'un plugin de zéro
- Plugin — point d'entrée et cycle de vie du plugin
- Router — routes de page et enregistrement de page de configuration
- Context → Capacités courantes — ctx.api, ctx.t, etc.
- Développement de composants Component — écriture de composants React
- Aperçu du développement côté serveur — définition d'API back-end
- Internationalisation i18n — écriture des fichiers de traduction
- Internationalisation i18n (serveur) — traduction côté serveur

