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.php
e umInstall.php
que é 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.php
copia 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.php
excluirá 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,
fornecedor
enome 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.php
para a configuração principal do plugin,bootstrap.php
para configuração de inicialização do processo,route.php
para configuração de rotas,middleware.php
para configuração de middleware,process.php
para configuração de processos personalizados,database.php
para configuração do banco de dados,redis.php
para configuração do Redis ethinkorm.php
para 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/database
deve serDb::connection('plugin.fornecedor.nome-do-plugin.conexão específica')
,thinkrom
deve 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/src
e 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/admin
suporta as seguintes configurações:app.php
para configuração principal do plugin,bootstrap.php
para configuração de inicialização do processo,route.php
para configuração de rotas,middleware.php
para configuração de middleware,process.php
para configuração de processos personalizados,database.php
para configuração do banco de dados,redis.php
para configuração do Redis ethinkorm.php
para 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/admin
será copiado paravendor/foo/admin/src
, ao mesmo tempo em que umInstall.php
será 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/src
para o diretórioconfig/plugin
do projeto atual.
A remoção padrão é deletar os arquivos de configuração do diretórioconfig/plugin
do projeto atual.
Você pode modificar oInstall.php
para 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
admin
no 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/new
e publique um release comov1.0.0
. - Acesse o packagist, clique em
Submit
na 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 nopackagist
aparecer um conflito de nomes, você pode alterar o nome do fornecedor, por exemplo, mudarfoo/admin
paramyfoo/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/admin
devem 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.php
serve 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/console
carregará automaticamente os comandos personalizados configurados emcommand.php
de 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
.