流程 de création et de publication de plugins de base
Principe
- En prenant l'exemple d'un plugin de cross-origin, le plugin se compose de trois parties : un fichier de programme middleware cross-origin, un fichier de configuration middleware.php, et un Install.php généré automatiquement à l'aide d'une commande.
- Nous utilisons une commande pour empaqueter ces trois fichiers et les publier sur composer.
- Lorsqu'un utilisateur installe le plugin cross-origin avec composer, Install.php du plugin copiera le fichier de programme middleware cross-origin ainsi que le fichier de configuration dans
{projet principal}/config/plugin
, afin que webman puisse les charger. Ce qui permet d'appliquer automatiquement les configurations des fichiers middleware cross-origin. - Lorsqu'un utilisateur supprime ce plugin avec composer, Install.php supprimera les fichiers de programm middleware cross-origin correspondants et le fichier de configuration, réalisant ainsi la désinstallation automatique du plugin.
Normes
- Le nom du plugin se compose de deux parties : le "fabricant" et le "nom du plugin", par exemple
webman/push
, qui correspond au nom du package composer. - Les fichiers de configuration du plugin sont tous stockés dans le dossier
config/plugin/fabricant/plugin
(la commande console créera automatiquement ce dossier de configuration). Si le plugin n'a pas besoin de configuration, le dossier de configuration créé automatiquement doit être supprimé. - Les dossiers de configuration du plugin prennent en charge uniquement les fichiers suivants : app.php (configuration principale du plugin), bootstrap.php (configuration de démarrage du processus), route.php (configuration des routes), middleware.php (configuration des middlewares), process.php (configuration des processus personnalisés), database.php (configuration de la base de données), redis.php (configuration redis), thinkorm.php (configuration thinkorm). Ces configurations seront automatiquement reconnues par webman.
- Le plugin utilise la méthode suivante pour accéder à la configuration :
config('plugin.fabricant.plugin.nom du fichier de configuration.configuration spécifique');
par exempleconfig('plugin.webman.push.app.app_key')
. - Si le plugin a sa propre configuration de base de données, elle est accessible de la manière suivante :
illuminate/database
:Db::connection('plugin.fabricant.plugin.connexion spécifique')
,thinkrom
:Db::connection('plugin.fabricant.plugin.connexion spécifique')
. - Si le plugin doit placer des fichiers métier dans le répertoire
app/
, il faut s'assurer qu'ils ne entrent pas en conflit avec les projets utilisateur ou d'autres plugins. - Le plugin devrait éviter autant que possible de copier des fichiers ou des répertoires dans le projet principal. Par exemple, le fichier de middleware du plugin cross-origin doit être placé dans
vendor/webman/cros/src
, sans nécessité de copier dans le projet principal. - Il est recommandé d'utiliser des majuscules pour les espaces de noms des plugins, par exemple Webman/Console.
Exemple
Installation de la commande webman/console
composer require webman/console
Création du plugin
Supposons que le plugin créé s'appelle foo/admin
(le nom doit être en minuscules pour être compatible avec le nom du projet composer). Exécutez la commande suivante : php webman plugin:create --name=foo/admin
Une fois le plugin créé, deux dossiers seront générés : vendor/foo/admin
pour stocker les fichiers du plugin, et config/plugin/foo/admin
pour stocker la configuration associée du plugin.
Remarque
Le dossierconfig/plugin/foo/admin
prend en charge les configurations suivantes : app.php (configuration principale du plugin), bootstrap.php (configuration de démarrage du processus), route.php (configuration des routes), middleware.php (configuration des middlewares), process.php (configuration des processus personnalisés), database.php (configuration de la base de données), redis.php (configuration redis), thinkorm.php (configuration thinkorm). Le format des configurations est identique à celui de webman et ces configurations seront automatiquement reconnues et fusionnées dans la configuration.
Exporter le plugin
Une fois le développement du plugin terminé, exécutez la commande suivante pour l'exporter : php webman plugin:export --name=foo/admin
Remarque
Après l'exportation, le dossierconfig/plugin/foo/admin
est copié dansvendor/foo/admin/src
, et un fichier Install.php est généré automatiquement. Install.php est utilisé pour exécuter certaines opérations lors de l'installation et de la désinstallation automatique du plugin.
Par défaut, lors de l'installation, les configurations du dossiervendor/foo/admin/src
sont copiées dansconfig/plugin
du projet actuel.
Par défaut, lors de la désinstallation, les fichiers de configuration deconfig/plugin
du projet actuel sont supprimés.
Vous pouvez modifier Install.php pour effectuer des opérations personnalisées lors de l'installation et de la désinstallation du plugin.
Soumettre le plugin
- Supposons que vous ayez déjà un compte sur github et packagist
- Sur github, créez un nouveau projet admin et téléversez-y le code. Si l'adresse du projet est
https://github.com/your-username/admin
- Rendez-vous sur
https://github.com/your-username/admin/releases/new
pour publier une nouvelle version, par exemplev1.0.0
- Sur packagist, cliquez sur
Submit
dans la barre de navigation, puis soumettez l'adresse de votre projet sur githubhttps://github.com/your-username/admin
. Votre plugin est ainsi publié.
Astuce
Si lors de la soumission du plugin àpackagist
un conflit apparaît, vous pouvez modifier le nom du fabricant. Par exemple, changerfoo/admin
enmyfoo/admin
.
Par la suite, lorsque le code de votre plugin est mis à jour, synchronisez le code sur github, puis republiez une nouvelle version à l'adresse https://github.com/your-username/admin/releases/new
. Ensuite, sur la page https://packagist.org/packages/foo/admin
, cliquez sur le bouton Update
pour mettre à jour la version.
Ajout de commandes au plugin
Parfois, un plugin nécessite des commandes personnalisées pour fournir des fonctionnalités d'assistance. Par exemple, lors de l'installation du plugin webman/redis-queue
, le projet inclura automatiquement une commande redis-queue:consumer
, permettant à l'utilisateur de lancer la commande php webman redis-queue:consumer send-mail
pour générer une classe de consommateur SendMail.php dans le projet, ce qui facilite le développement.
Supposons que le plugin foo/admin
ait besoin d'ajouter la commande foo-admin:add
, suivez les étapes ci-dessous.
Créer une nouvelle commande
Créez un nouveau fichier de commande vendor/foo/admin/src/FooAdminAddCommand.php
<?php
namespace Foo\Admin;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class FooAdminAddCommand extends Command {
protected static $defaultName = 'foo-admin:add';
protected static $defaultDescription = 'Description de la commande ici';
protected function configure() {
$this->addArgument('name', InputArgument::REQUIRED, 'Ajouter un nom');
}
protected function execute(InputInterface $input, OutputInterface $output) {
$name = $input->getArgument('name');
$output->writeln("Ajout admin $name");
return self::SUCCESS;
}
}
Remarque
Pour éviter les conflits de commandes entre les plugins, le format de la ligne de commande est recommandé comme suit :fabricant-nom du plugin:commande spécifique
, par exemple, toutes les commandes du pluginfoo/admin
devraient commencer parfoo-admin:
, par exemplefoo-admin:add
.
Ajouter une configuration
Créer une nouvelle configuration config/plugin/foo/admin/command.php
<?php
use Foo\Admin\FooAdminAddCommand;
return [
FooAdminAddCommand::class,
// ....vous pouvez ajouter plusieurs configurations...
];
Astuce
command.php
est utilisé pour configurer des commandes personnalisées pour le plugin. Chaque élément du tableau correspond à un fichier de classe de commande et chaque classe de commande correspond à une commande. Lorsque l'utilisateur exécute une commande,webman/console
chargera automatiquement toutes les commandes personnalisées configurées danscommand.php
de chaque plugin. Pour en savoir plus sur les commandes, veuillez consulter la section Commandes (console.html).
Exporter
Exécutez la commande php webman plugin:export --name=foo/admin
pour exporter le plugin et le soumettre à packagist
. Ainsi, après installation du plugin foo/admin
, la commande foo-admin:add
sera ajoutée. L'exécution de la commande php webman foo-admin:add jerry
affichera Ajout admin jerry
.