Processo de Geração e Publicação de Plugins Básicos
Princípio
- Tomando o plugin de cross-domain como exemplo, o plugin é dividido em três partes: um arquivo de programa middleware de cross-domain, um arquivo de configuração de middleware
middleware.phpe umInstall.phpque é gerado automaticamente por meio de um comando. - Usamos um comando para empacotar os três arquivos e publicá-los no Composer.
- Quando um usuário instala o plugin de cross-domain usando o Composer, o
Install.phpcopia o arquivo de programa middleware de cross-domain e o arquivo de configuração para{projeto principal}/config/plugin, permitindo que o Webman o carregue. Isso resulta na configuração automática do arquivo middleware de cross-domain. - Quando um usuário remove o plugin usando o Composer, o
Install.phpexcluirá o respectivo arquivo de programa middleware de cross-domain e o arquivo de configuração, realizando a desinstalação automática do plugin.
Normas
- O nome do plugin consiste em duas partes,
fornecedorenome do plugin, por exemplo,webman/push, que corresponde ao nome do pacote do Composer. - Os arquivos de configuração do plugin devem ser uniformemente armazenados em
config/plugin/fornecedor/nome-do-plugin/(o comando do console criará automaticamente o diretório de configuração). Se o plugin não requer configuração, o diretório de configuração criado automaticamente deve ser removido. - O diretório de configuração do plugin suporta apenas
app.phppara a configuração principal do plugin,bootstrap.phppara configuração de inicialização do processo,route.phppara configuração de rotas,middleware.phppara configuração de middleware,process.phppara configuração de processos personalizados,database.phppara configuração do banco de dados,redis.phppara configuração do Redis ethinkorm.phppara configuração do ThinkORM. Essas configurações serão automaticamente reconhecidas pelo Webman. - O plugin usa o seguinte método para obter configurações:
config('plugin.fornecedor.nome-do-plugin.arquivo-de-configuração.item-de-configuração-específica');, por exemplo,config('plugin.webman.push.app.app_key'). - Se o plugin possui suas próprias configurações de banco de dados, elas devem ser acessadas da seguinte forma.
illuminate/databasedeve serDb::connection('plugin.fornecedor.nome-do-plugin.conexão específica'),thinkromdeve serDb::connct('plugin.fornecedor.nome-do-plugin.conexão específica'). - Se o plugin precisa instalar arquivos de negócios no diretório
app/, deve-se garantir que não haja conflitos com o projeto do usuário nem com outros plugins. - O plugin deve evitar ao máximo copiar arquivos ou diretórios para o projeto principal; por exemplo, os arquivos de middleware do plugin de cross-domain devem ser armazenados em
vendor/webman/cros/srce não precisam ser copiados para o projeto principal, exceto pelos arquivos de configuração. - É recomendado que o namespace do plugin utilize letras maiúsculas, por exemplo, Webman/Console.
Exemplo
Instalação do comando webman/console
composer require webman/console
Criar Plugin
Suponha que o nome do plugin criado seja foo/admin (o nome deve ser em letras minúsculas, pois será o nome do projeto a ser publicado no Composer mais tarde). Execute o comando:
php webman plugin:create --name=foo/admin
Após a criação do plugin, será gerado o diretório vendor/foo/admin para armazenar os arquivos relacionados ao plugin e config/plugin/foo/admin para armazenar as configurações relacionadas ao plugin.
Atenção
config/plugin/foo/adminsuporta as seguintes configurações:app.phppara configuração principal do plugin,bootstrap.phppara configuração de inicialização do processo,route.phppara configuração de rotas,middleware.phppara configuração de middleware,process.phppara configuração de processos personalizados,database.phppara configuração do banco de dados,redis.phppara configuração do Redis ethinkorm.phppara configuração do ThinkORM. O formato de configuração é o mesmo que o do Webman e essas configurações serão automaticamente reconhecidas e mescladas nas configurações. Acesse usando o prefixoplugin, por exemplo,config('plugin.foo.admin.app');
Exportar Plugin
Após desenvolver o plugin, execute o seguinte comando para exportá-lo:
php webman plugin:export --name=foo/admin
Exportação
Nota
Após a exportação, o diretórioconfig/plugin/foo/adminserá copiado paravendor/foo/admin/src, ao mesmo tempo em que umInstall.phpserá gerado automaticamente; oInstall.phpé utilizado para realizar algumas operações automaticamente durante a instalação e desinstalação.
A operação padrão de instalação é copiar as configurações do diretóriovendor/foo/admin/srcpara o diretórioconfig/plugindo projeto atual.
A remoção padrão é deletar os arquivos de configuração do diretórioconfig/plugindo projeto atual.
Você pode modificar oInstall.phppara realizar operações personalizadas durante a instalação e desinstalação do plugin.
Submeter Plugin
- Suponha que você já tenha uma conta no github e packagist.
- Crie um projeto
adminno github e faça o upload do código. O endereço do projeto é, hipoteticamente,https://github.com/seu-usuario/admin. - Acesse o endereço
https://github.com/seu-usuario/admin/releases/newe publique um release comov1.0.0. - Acesse o packagist, clique em
Submitna navegação e envie o endereço do seu projeto do Githubhttps://github.com/seu-usuario/admin, completando assim a publicação do plugin.
Dica
Se ao submeter o plugin nopackagistaparecer um conflito de nomes, você pode alterar o nome do fornecedor, por exemplo, mudarfoo/adminparamyfoo/admin.
Quando o código do seu projeto de plugin for atualizado, você precisará sincronizar o código com o Github e acessar novamente o endereço https://github.com/seu-usuario/admin/releases/new para publicar um novo release. Em seguida, vá para a página https://packagist.org/packages/foo/admin e clique no botão Update para atualizar a versão.
Adicionar Comandos ao Plugin
Às vezes, precisamos adicionar alguns comandos personalizados ao nosso plugin para fornecer funcionalidades auxiliares. Por exemplo, após instalar o plugin webman/redis-queue, o projeto adicionará automaticamente um comando redis-queue:consumer, e o usuário poderá executar php webman redis-queue:consumer send-mail que gerará uma classe consumidora SendMail.php no projeto, facilitando o desenvolvimento rápido.
Suponha que o plugin foo/admin precise adicionar o comando foo-admin:add, siga as etapas abaixo.
Criar Comando
Criar o arquivo de 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 = 'Aqui está a descrição do comando';
/**
* @return void
*/
protected function configure()
{
$this->addArgument('name', InputArgument::REQUIRED, 'Adicionar 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;
}
}
Atenção
Para evitar conflitos entre comandos de plugins, recomenda-se que o formato do comando sejafornecedor-nome-do-plugin:comando específico, por exemplo, todos os comandos do pluginfoo/admindevem ter o prefixofoo-admin:, como emfoo-admin:add.
Adicionar Configuração
Criar a configuração config/plugin/foo/admin/command.php
<?php
use Foo\Admin\FooAdminAddCommand;
return [
FooAdminAddCommand::class,
// ....pode adicionar múltiplas configurações...
];
Dica
Ocommand.phpserve para configurar comandos personalizados para o plugin; cada elemento do array corresponde a uma classe de comando. Quando o usuário executa a linha de comando, owebman/consolecarregará automaticamente os comandos personalizados configurados emcommand.phpde cada plugin. Para saber mais sobre comandos de linha, consulte Comando de Linha.
Executar Exportação
Execute o comando php webman plugin:export --name=foo/admin para exportar o plugin e submetê-lo ao packagist. Assim, quando um usuário instalar o plugin foo/admin, um comando foo-admin:add será adicionado. Ao executar php webman foo-admin:add jerry, a saída será Admin add jerry.