Processo di generazione e pubblicazione di plugin di base

Principio

  1. 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.
  2. Utilizziamo un comando per impacchettare i tre file e pubblicarli su composer.
  3. 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.
  4. 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

  1. Il nome del plugin è composto da due parti, fornitore e nome del plugin, ad esempio webman/push, questo corrisponde al nome del pacchetto composer.
  2. 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.
  3. 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.
  4. I plugin ottengono la configurazione usando il seguente metodo config('plugin.fornitore.nome del plugin.file di configurazione. voce di configurazione specifica');, ad esempio config('plugin.webman.push.app.app_key').
  5. Se il plugin ha una propria configurazione del database, deve essere accessibile nel seguente modo. illuminate/database come Db::connection('plugin.fornitore.nome del plugin.connessione specifica'), thinkrom come Db::connct('plugin.fornitore.nome del plugin.connessione specifica').
  6. 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.
  7. 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.
  8. 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 prefisso plugin, ad esempio config('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 come v1.0.0.
  • Vai su packagist e clicca su Submit nel menu di navigazione, invia l'indirizzo del tuo progetto github https://github.com/tuo_nome_utente/admin, così hai completato la pubblicazione di un plugin.

Suggerimento
Se durante l'invio del plugin a packagist si verifica un conflitto di nomi, prova a cambiare il nome del fornitore, ad esempio cambiare foo/admin in myfoo/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 plugin foo/admin dovrebbero avere come prefisso foo-admin:, ad esempio foo-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 in command.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.