Processus de génération et de publication de plugins de base
Principe
- Prenons l'exemple d'un plugin Cross-Domain, le plugin se divise en trois parties : un fichier de programme middleware Cross-Domain, un fichier de configuration middleware.php et un Install.php généré automatiquement par commande.
- Nous utilisons une commande pour empaqueter et publier les trois fichiers sur composer.
- Lorsque l'utilisateur installe le plugin Cross-Domain via composer, le fichier Install.php copie le fichier de programme middleware Cross-Domain ainsi que le fichier de configuration dans
{projet principal}/config/plugin
, permettant à webman de les charger. Cela permet de configurer automatiquement le fichier middleware Cross-Domain. - Lorsque l'utilisateur désinstalle ce plugin via composer, Install.php supprime le fichier de programme middleware Cross-Domain et le fichier de configuration correspondants, permettant une désinstallation automatique du plugin.
Normes
- Le nom du plugin est constitué de deux parties :
fournisseur
etnom du plugin
, par exemplewebman/push
, qui correspond au nom du package composer. - Les fichiers de configuration des plugins doivent être placés dans
config/plugin/fournisseur/nom_du_plugin/
(la commande console créera automatiquement ce répertoire de configuration). Si le plugin n'a pas besoin de configuration, il faut supprimer le répertoire de configuration créé automatiquement. - Le répertoire de configuration des plugins ne supporte que app.php pour la configuration principale du plugin, bootstrap.php pour la configuration de démarrage des processus, route.php pour la configuration des routes, middleware.php pour la configuration des middlewares, process.php pour la configuration des processus personnalisés, database.php pour la configuration de la base de données, redis.php pour la configuration redis et thinkorm.php pour la configuration thinkorm. Ces configurations seront automatiquement reconnues par webman.
- Le plugin utilise la méthode suivante pour obtenir sa configuration
config('plugin.fournisseur.nom_du_plugin.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 peut être accédée de la manière suivante.
illuminate/database
seraDb::connection('plugin.fournisseur.nom_du_plugin.connexion_spécifique')
,thinkrom
seraDb::connect('plugin.fournisseur.nom_du_plugin.connexion_spécifique')
. - Si le plugin doit placer des fichiers métier dans le répertoire
app/
, il doit s'assurer qu'il n'y a pas de conflit avec le projet de l'utilisateur et d'autres plugins. - Les plugins devraient éviter de copier des fichiers ou répertoires dans le projet principal, par exemple, pour le plugin Cross-Domain, à part le fichier de configuration qui doit être copié dans le projet principal, le fichier middleware devrait être placé dans
vendor/webman/cros/src
et ne devrait pas être copié dans le projet principal. - Il est conseillé d'utiliser un espace de noms avec des majuscules pour les plugins, par exemple Webman/Console.
Exemple
Installation de la ligne de commande webman/console
composer require webman/console
Création d'un plugin
Supposons que le plugin que nous créons s'appelle foo/admin
(le nom est également le nom du projet à publier sur composer, il doit être en minuscules).
Exécutez la commande
php webman plugin:create --name=foo/admin
Après la création du plugin, un répertoire vendor/foo/admin
sera généré pour stocker les fichiers liés au plugin et config/plugin/foo/admin
pour stocker la configuration du plugin.
Attention
config/plugin/foo/admin
prend en charge les configurations suivantes : app.php pour la configuration principale du plugin, bootstrap.php pour la configuration de démarrage des processus, route.php pour la configuration des routes, middleware.php pour la configuration des middlewares, process.php pour la configuration des processus personnalisés, database.php pour la configuration de la base de données, redis.php pour la configuration redis et thinkorm.php pour la configuration thinkorm. Le format de configuration est le même que celui de webman, ces configurations seront automatiquement reconnues et fusionnées dans la configuration.
Accédez en utilisant le préfixeplugin
, par exemple config('plugin.foo.admin.app');
Exportation du plugin
Une fois que nous avons développé le plugin, exécutons la commande suivante pour l'exporter.
php webman plugin:export --name=foo/admin
Exporter
Remarque
L'exportation copiera le répertoire config/plugin/foo/admin dans vendor/foo/admin/src, tout en générant automatiquement un Install.php, Install.php sert à exécuter certaines opérations lors de l'installation et de la désinstallation automatiques.
L'opération par défaut lors de l'installation est de copier la configuration du répertoire vendor/foo/admin/src vers current projet config/plugin.
Lors de la suppression, l'opération par défaut est de supprimer les fichiers de configuration de current projet config/plugin.
Vous pouvez modifier Install.php pour effectuer certaines opérations personnalisées lors de l'installation et de la désinstallation du plugin.
Soumettre le plugin
- Supposons que vous disposiez d'un compte github et packagist
- Créez un projet admin sur github et téléchargez le code, l'adresse du projet est supposée être
https://github.com/votre_nom_d_utilisateur/admin
. - Allez à l'adresse
https://github.com/votre_nom_d_utilisateur/admin/releases/new
pour publier une release commev1.0.0
. - Allez sur packagist et cliquez sur 'Soumettre' dans la navigation, soumettez votre adresse du projet github
https://github.com/votre_nom_d_utilisateur/admin
, ainsi vous aurez terminé la publication d'un plugin.
Astuce
Si lors de la soumission du plugin surpackagist
, cela indique un conflit de texte, vous pouvez choisir un autre nom de fournisseur, par exemple changerfoo/admin
enmyfoo/admin
.
À l'avenir, lorsque votre code de plugin est mis à jour, vous devez synchroniser le code avec github, puis accédez à l'adresse https://github.com/votre_nom_d_utilisateur/admin/releases/new
pour publier à nouveau une release, puis allez sur https://packagist.org/packages/foo/admin
et cliquez sur le bouton Mise à jour
pour mettre à jour la version.
Ajouter des commandes au plugin
Parfois, notre plugin a besoin de certaines commandes personnalisées pour fournir des fonctionnalités auxiliaires, par exemple, après l'installation du plugin webman/redis-queue
, le projet ajoutera automatiquement une commande redis-queue:consumer
, l'utilisateur n'a qu'à exécuter 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 rapide.
Supposons que le plugin foo/admin
doive ajouter la commande foo-admin:add
, suivez les étapes ci-dessous.
Créer une nouvelle commande
Créer le 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 ligne de commande ici';
/**
* @return void
*/
protected function configure()
{
$this->addArgument('name', InputArgument::REQUIRED, 'Ajouter un nom');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument('name');
$output->writeln("Admin ajouter $name");
return self::SUCCESS;
}
}
Attention
Pour éviter les conflits de commandes entre les plugins, il est conseillé que le format de la ligne de commande soitfournisseur-nom_du_plugin:commande_spécifique
, par exemple, toutes les commandes du pluginfoo/admin
devraient avoir le préfixefoo-admin:
, commefoo-admin:add
.
Ajouter une configuration
Créer la configuration config/plugin/foo/admin/command.php
<?php
use Foo\Admin\FooAdminAddCommand;
return [
FooAdminAddCommand::class,
// ....vous pouvez ajouter plusieurs configurations...
];
Astuce
command.php
sert à configurer des commandes personnalisées pour le plugin, chaque élément du tableau correspond à un fichier de classe de commande, chaque fichier de classe correspondant à une commande. Lorsque l'utilisateur exécute une ligne de commande,webman/console
chargera automatiquement chaque commande personnalisée définie dans lecommand.php
du plugin. Pour en savoir plus sur les lignes de commande, veuillez consulter lignes de commande.
Exécuter l'exportation
Exécutez la commande php webman plugin:export --name=foo/admin
pour exporter le plugin et soumettez-le à packagist
. De cette manière, lorsque l'utilisateur installera le plugin foo/admin
, une commande foo-admin:add
sera ajoutée. Exécutez php webman foo-admin:add jerry
pour afficher Admin ajouter jerry
.