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,
fornitore
enome 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/database
comeDb::connection('plugin.fornitore.nome del plugin.connessione specifica')
,thinkrom
comeDb::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/src
e 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/admin
supporta 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/new
per pubblicare una release comev1.0.0
. - Vai su packagist e clicca su
Submit
nel 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 apackagist
si verifica un conflitto di nomi, prova a cambiare il nome del fornitore, ad esempio cambiarefoo/admin
inmyfoo/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/admin
dovrebbero 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/console
caricherà automaticamente i comandi personalizzati impostati incommand.php
di 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
.