Procedura di generazione e distribuzione di base dei plugin
Principio
- Prendiamo come esempio il plugin di cross-origin, il plugin è composto da tre parti: un file di programma del middleware di cross-origin, un file di configurazione del middleware middleware.php e un Install.php generato automaticamente tramite comando.
- Utilizziamo un comando per comprimere i tre file e distribuirli tramite composer.
- Quando un utente installa il plugin di cross-origin utilizzando composer, l'Install.php nel plugin copierà il file di programma del middleware di cross-origin e il file di configurazione in
{progetto principale}/config/plugin
, consentendo a webman di caricarli e attivarli in modo automatico. - Quando un utente rimuove il plugin utilizzando composer, l'Install.php eliminerà il file di programma del middleware di cross-origin e il file di configurazione corrispondente, permettendo così la disinstallazione automatica del plugin.
Normativa
- Il nome del plugin è composto da due parti, il
produttore
e ilnome del plugin
, ad esempiowebman/push
, che corrisponde al nome del pacchetto composer. - Il file di configurazione del plugin è collocato uniformemente in
config/plugin/produttore/nome del plugin/
(il comando della console creerà automaticamente la directory di configurazione). Se il plugin non richiede configurazioni, è necessario eliminare la directory di configurazione creata automaticamente. - La directory di configurazione del plugin supporta solo i seguenti file: app.php (configurazione principale del plugin), bootstrap.php (configurazione di avvio del processo), route.php (configurazione del percorso), middleware.php (configurazione middleware), process.php (configurazione del processo personalizzato), database.php (configurazione del database), redis.php (configurazione di redis), thinkorm.php (configurazione di thinkorm). Queste configurazioni verranno riconosciute automaticamente da webman.
- Il plugin utilizza il seguente metodo per ottenere la configurazione:
config('plugin.produttore.nome del plugin.file di configurazione.configurazione specifica');
, ad esempioconfig('plugin.webman.push.app.app_key')
. - Se il plugin ha una propria configurazione del database, questa può essere accessa nel seguente modo:
illuminate/database
diventaDb::connection('plugin.produttore.nome del plugin.connessione specifica')
,thinkrom
diventaDb::connct('plugin.produttore.nome del plugin.connessione specifica')
. - Se il plugin ha bisogno di inserire file di business nella directory
app/
, è necessario assicurarsi che non entrino in conflitto con i progetti degli utenti e altri plugin. - I plugin dovrebbero evitare il più possibile di copiare file o directory nel progetto principale. Ad esempio, nel caso del plugin di cross-origin, oltre al file di configurazione che deve essere copiato nel progetto principale, il file del middleware dovrebbe essere posto in
vendor/webman/cros/src
e non copiato nel progetto principale. - Si consiglia di utilizzare lettere maiuscole per lo spazio dei nomi del plugin, ad esempio Webman/Console.
Esempio
Installazione del comando webman/console
composer require webman/console
Creazione del plugin
Supponiamo che il plugin creato si chiami foo/admin
(il nome è anche il nome del progetto da pubblicare con composer, il nome deve essere in minuscolo).
Esegui il comando
php webman plugin:create --name=foo/admin
Dopo la creazione del plugin verrà creata la directory vendor/foo/admin
per memorizzare i file correlati al plugin e config/plugin/foo/admin
per memorizzare le relative configurazioni del 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 del percorso), middleware.php (configurazione middleware), process.php (configurazione del processo personalizzato), database.php (configurazione del database), redis.php (configurazione di redis), thinkorm.php (configurazione di thinkorm). Il formato della configurazione è lo stesso di webman, queste configurazioni saranno automaticamente riconosciute e unite nella configurazione.
L'accesso avviene tramite prefissoplugin
, ad esempio config('plugin.foo.admin.app');
Esportazione del plugin
Una volta completato lo sviluppo del plugin, eseguire il comando seguente per esportare il plugin
php webman plugin:export --name=foo/admin
Spiegazione
Dopo l'esportazione, la directory config/plugin/foo/admin verrà copiata in vendor/foo/admin/src e verrà generato automaticamente un file Install.php. Install.php viene utilizzato per eseguire operazioni automatiche durante l'installazione e la disinstallazione del plugin.
L'operazione predefinita durante l'installazione è copiare le configurazioni dalla directory vendor/foo/admin/src nell'attuale directory config/plugin del progetto.
L'operazione predefinita durante la rimozione è eliminare i file di configurazione dall'attuale directory config/plugin del progetto.
È possibile modificare Install.php per eseguire operazioni personalizzate durante l'installazione e la disinstallazione del plugin.
Pubblicazione del plugin
- Supponiamo che tu abbia già un account github e packagist
- Crea un nuovo progetto admin su github e carica il codice, l'indirizzo del progetto dovrebbe essere
https://github.com/tuonome/admin
- Vai all'indirizzo
https://github.com/tuonome/admin/releases/new
per pubblicare una release, ad esempiov1.0.0
- Vai su packagist, clicca su
Submit
nella barra di navigazione e invia l'indirizzo del tuo progetto githubhttps://github.com/tuonome/admin
, così avrai completato la pubblicazione di un plugin.
Consiglio
Se la pubblicazione del plugin supackagist
mostra un conflitto, è possibile scegliere un nuovo nome per il produttore, ad esempiofoo/admin
può diventaremiofoo/admin
.
In seguito, quando il codice del plugin subisce aggiornamenti, è necessario sincronizzare il codice su github, quindi tornare all'indirizzo https://github.com/tuonome/admin/releases/new
per pubblicare nuovamente un release, quindi andare alla pagina https://packagist.org/packages/foo/admin
e fare clic su Update
per aggiornare la versione.
Aggiungere comandi ai plugin
A volte i nostri plugin richiedono alcuni comandi personalizzati per fornire alcune funzionalità ausiliarie. Ad esempio, dopo aver installato il plugin webman/redis-queue
, il progetto aggiungerà automaticamente un comando redis-queue:consumer
. Gli utenti possono eseguire php webman redis-queue:consumer send-mail
per generare una classe consumatrice SendMail.php nel progetto, il che è utile per lo sviluppo rapido.
Supponiamo che il plugin foo/admin
debba aggiungere il comando foo-admin:add
, seguire i passaggi seguenti.
Creare un nuovo comando
Creare il file del 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 nome');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument('name');
$output->writeln("Aggiunto admin $name");
return self::SUCCESS;
}
}
Nota
Per evitare conflitti tra comandi dei plugin, il formato della riga di comando è consigliato comeproduttore-nomeplugin:comando
, ad esempio, tutti i comandi del pluginfoo/admin
dovrebbero avere il prefissofoo-admin:
, come ad esempiofoo-admin:add
.
Aggiungere configurazioni
Creare la configurazione config/plugin/foo/admin/command.php
<?php
use Foo\Admin\FooAdminAddCommand;
return [
FooAdminAddCommand::class,
// ....è possibile aggiungere più configurazioni...
];
Suggerimento
command.php
viene utilizzato per configurare i comandi personalizzati dei plugin. Ogni elemento dell'array corrisponde a un file di classe dei comandi da riga di comando, e ogni file di classe corrisponde a un comando. Quando l'utente esegue un comando da riga di comando,webman/console
caricherà automaticamente i comandi personalizzati configurati incommand.php
di ciascun plugin. Per ulteriori informazioni sui comandi da riga di comando, fare riferimento a Riga di comando.
Eseguire l'esportazione
Eseguire il comando php webman plugin:export --name=foo/admin
per esportare il plugin e caricarlo su packagist
. In questo modo, una volta installato il plugin foo/admin
, verrà aggiunto il comando foo-admin:add
. Eseguendo php webman foo-admin:add jerry
verrà visualizzato Aggiunto admin jerry
.