Processo di generazione e pubblicazione di plugin di base
Principio
- Prendendo come esempio un plugin cross-domain, il plugin è composto da tre parti: un file di programma middleware cross-domain, un file di configurazione middleware.php e un Install.php generato automaticamente tramite comando.
- Utilizziamo un comando per impacchettare i tre file e pubblicarli su composer.
- Quando un utente installa il plugin cross-domain utilizzando composer, Install.php copierà il file di programma middleware cross-domain e il file di configurazione nella directory
{progetto principale}/config/plugin, permettendo a webman di caricarli. Questo consente la configurazione automatica del file middleware cross-domain. - Quando un utente rimuove il plugin utilizzando composer, Install.php eliminerà i relativi file di programma middleware cross-domain e il file di configurazione, realizzando la disinstallazione automatica del plugin.
Specifiche
- Il nome del plugin è composto da due parti,
fornitoreenome del plugin, ad esempiowebman/push, questo corrisponde al nome del pacchetto composer. - I file di configurazione dei plugin devono essere collocati nella directory
config/plugin/fornitore/nome del plugin/(la console creerà automaticamente la directory di configurazione). Se il plugin non necessita di configurazione, è necessario eliminare la directory di configurazione creata automaticamente. - La directory di configurazione del plugin supporta solo app.php configurazione principale del plugin, bootstrap.php configurazione di avvio del processo, route.php configurazione delle route, middleware.php configurazione del middleware, process.php configurazione del processo personalizzato, database.php configurazione del database, redis.php configurazione redis, thinkorm.php configurazione thinkorm. Queste configurazioni saranno automaticamente riconosciute da webman.
- I plugin ottengono la configurazione usando il seguente metodo
config('plugin.fornitore.nome del plugin.file di configurazione. voce di configurazione specifica');, ad esempioconfig('plugin.webman.push.app.app_key'). - Se il plugin ha una propria configurazione del database, deve essere accessibile nel seguente modo.
illuminate/databasecomeDb::connection('plugin.fornitore.nome del plugin.connessione specifica'),thinkromcomeDb::connct('plugin.fornitore.nome del plugin.connessione specifica'). - Se il plugin deve posizionare file di business nella directory
app/, deve garantire che non ci siano conflitti con il progetto dell'utente e altri plugin. - I plugin dovrebbero evitare di copiare file o directory nel progetto principale, ad esempio il plugin cross-domain, oltre ai file di configurazione, deve posizionare i file middleware in
vendor/webman/cros/srce non è necessario copiarli nel progetto principale. - Si consiglia di utilizzare uno spazio dei nomi maiuscolo per i plugin, ad esempio Webman/Console.
Esempio
Installazione del comando webman/console
composer require webman/console
Creazione del plugin
Supponiamo che il nome del plugin che vogliamo creare sia foo/admin (il nome è quello che verrà utilizzato in seguito per pubblicare il progetto su composer, e deve essere in minuscolo).
Eseguiamo il comando
php webman plugin:create --name=foo/admin
Dopo aver creato il plugin, verrà generata la directory vendor/foo/admin per memorizzare i file relativi al plugin e config/plugin/foo/admin per memorizzare la configurazione relativa al plugin.
Nota
config/plugin/foo/adminsupporta le seguenti configurazioni: app.php configurazione principale del plugin, bootstrap.php configurazione di avvio del processo, route.php configurazione delle route, middleware.php configurazione del middleware, process.php configurazione del processo personalizzato, database.php configurazione del database, redis.php configurazione redis, thinkorm.php configurazione thinkorm. Il formato di configurazione è lo stesso di webman, queste configurazioni saranno automaticamente riconosciute e unite alla configurazione.
L'accesso avviene con il prefissoplugin, ad esempioconfig('plugin.foo.admin.app');
Esportazione del plugin
Una volta completato lo sviluppo del plugin, eseguiamo il seguente comando per esportare il plugin
php webman plugin:export --name=foo/admin
Esportazione
Descrizione
Dopo l'esportazione, la directory config/plugin/foo/admin verrà copiata in vendor/foo/admin/src, generando automaticamente un Install.php. Install.php viene utilizzato per eseguire alcune operazioni durante l'installazione e la disinstallazione automatica.
L'operazione predefinita di installazione è copiare la configurazione dalla directory vendor/foo/admin/src a config/plugin del progetto attuale.
L'operazione predefinita di rimozione è eliminare i file di configurazione dalla directory config/plugin del progetto attuale.
Puoi modificare Install.php per eseguire operazioni personalizzate durante l'installazione e la disinstallazione del plugin.
Invio del plugin
- Supponiamo che tu abbia già un account su github e packagist.
- Crea un progetto chiamato admin su github e carica il codice, l'indirizzo del progetto è supponiamo
https://github.com/tuo_nome_utente/admin. - Vai a
https://github.com/tuo_nome_utente/admin/releases/newper pubblicare una release comev1.0.0. - Vai su packagist e clicca su
Submitnel menu di navigazione, invia l'indirizzo del tuo progetto githubhttps://github.com/tuo_nome_utente/admin, così hai completato la pubblicazione di un plugin.
Suggerimento
Se durante l'invio del plugin apackagistsi verifica un conflitto di nomi, prova a cambiare il nome del fornitore, ad esempio cambiarefoo/admininmyfoo/admin.
Successivamente, quando ci sono aggiornamenti al codice del tuo progetto plugin, devi sincronizzare il codice su github e andare nuovamente a https://github.com/tuo_nome_utente/admin/releases/new per pubblicare una nuova release. Poi vai alla pagina https://packagist.org/packages/foo/admin e clicca sul pulsante Update per aggiornare la versione.
Aggiunta di comandi al plugin
A volte i nostri plugin hanno bisogno di comandi personalizzati per fornire alcune funzionalità, ad esempio dopo aver installato il plugin webman/redis-queue, il progetto aumenterà automaticamente un comando redis-queue:consumer. L'utente deve solo eseguire php webman redis-queue:consumer send-mail e verrà generata una classe consumatore SendMail.php nel progetto, il che aiuta a sviluppare rapidamente.
Supponiamo che il plugin foo/admin debba aggiungere il comando foo-admin:add, segui i passaggi seguenti.
Nuovo comando
Crea il file comando 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 = 'Questa è la descrizione del comando';
/**
* @return void
*/
protected function configure()
{
$this->addArgument('name', InputArgument::REQUIRED, 'Aggiungi il nome');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument('name');
$output->writeln("Admin add $name");
return self::SUCCESS;
}
}
Nota
Per evitare conflitti di comandi tra i plugin, il formato del comando suggerito èfornitore-nome del plugin:comando specifico, ad esempio, tutti i comandi del pluginfoo/admindovrebbero avere come prefissofoo-admin:, ad esempiofoo-admin:add.
Aggiunta di configurazione
Crea la configurazione config/plugin/foo/admin/command.php
<?php
use Foo\Admin\FooAdminAddCommand;
return [
FooAdminAddCommand::class,
// ....puoi aggiungere più configurazioni...
];
Suggerimento
command.phpè utilizzato per configurare comandi personalizzati per i plugin, ogni elemento dell'array corrisponde a un file di classe comando, ogni file di classe corrisponde a un comando. Quando l'utente esegue il comando,webman/consolecaricherà automaticamente i comandi personalizzati impostati incommand.phpdi ogni plugin. Per ulteriori informazioni sui comandi della riga di comando, fare riferimento a comandi della riga di comando.
Esegui l'esportazione
Esegui il comando php webman plugin:export --name=foo/admin per esportare il plugin e invialo a packagist. Così, quando l'utente installa il plugin foo/admin, verrà aggiunto un comando foo-admin:add. Eseguendo php webman foo-admin:add jerry verrà stampato Admin add jerry.