Процесс создания и публикации базового плагина
Принцип
- В качестве примера с плагином для кросс-доменных запросов, плагин состоит из трех частей: одного файла программы кросс-доменного промежуточного программного обеспечения, одного конфигурационного файла middleware.php и одного файла Install.php, который генерируется автоматически при помощи команды.
- Мы используем команду для упаковки трех файлов и публикации их в composer.
- Когда пользователь устанавливает плагин кросс-доменных запросов с помощью composer, файл Install.php в плагине копирует файл программы кросс-доменного промежуточного программного обеспечения и конфигурационный файл в
/{главный проект}/config/plugin
, чтобы webman мог его загрузить. Это позволяет автоматически настраивать конфигурацию файла кросс-доменного промежуточного программного обеспечения. - Когда пользователь удаляет этот плагин с помощью composer, Install.php удаляет соответствующий файл программы кросс-доменного промежуточного программного обеспечения и конфигурационный файл, тем самым обеспечивая автоматическую деинсталляцию плагина.
Нормы
- Имя плагина состоит из двух частей:
поставщик
иимя плагина
, напримерwebman/push
, что соответствует имени пакета composer. - Конфигурационные файлы плагина должны храниться в каталоге
config/plugin/поставщик/имя плагина/
(каталог конфигурации будет создан автоматически при выполнении команды console). Если плагин не требует конфигурации, то автоматически созданный каталог конфигурации нужно удалить. - В каталоге конфигурации плагина поддерживаются только app.php основная конфигурация плагина, bootstrap.php конфигурация запуска процесса, route.php конфигурация маршрутов, middleware.php конфигурация промежуточного программного обеспечения, process.php конфигурация пользовательских процессов, database.php конфигурация базы данных, redis.php конфигурация redis, thinkorm.php конфигурация thinkorm. Эти конфигурации будут автоматически распознаны webman.
- Плагин может получить конфигурацию с помощью следующего метода
config('plugin.поставщик.имя плагина.конфигурационный файл.конкретный элемент конфигурации');
, напримерconfig('plugin.webman.push.app.app_key')
. - Если у плагина есть собственная конфигурация базы данных, к ней можно получить доступ следующим образом.
illuminate/database
дляDb::connection('plugin.поставщик.имя плагина.конкретное соединение')
,thinkrom
дляDb::connct('plugin.поставщик.имя плагина.конкретное соединение')
. - Если плагин должен размещать файлы бизнес-логики в каталоге
app/
, необходимо убедиться, что они не конфликтуют с пользовательским проектом и другими плагинами. - Плагин должен избегать копирования файлов или каталогов в главный проект, например, файл промежуточного ПО кросс-доменных запросов должен находиться в
vendor/webman/cros/src
, а не в главном проекте. - Рекомендуется использовать заглавные буквы для пространства имен плагина, например Webman/Console.
Пример
Установка командной строки webman/console
composer require webman/console
Создание плагина
Предположим, что создаваемый плагин называется foo/admin
(имя также является названием проекта, который будет опубликован позже через composer, имя должно быть в lowercase). Выполните команду
php webman plugin:create --name=foo/admin
.
После создания плагина будет создан каталог vendor/foo/admin
для хранения файлов, связанных с плагином, и config/plugin/foo/admin
для хранения конфигурации плагина.
Внимание
config/plugin/foo/admin
поддерживает следующие конфигурации: app.php основная конфигурация плагина, bootstrap.php конфигурация запуска процесса, route.php конфигурация маршрутов, middleware.php конфигурация промежуточного программного обеспечения, process.php конфигурация пользовательских процессов, database.php конфигурация базы данных, redis.php конфигурация redis, thinkorm.php конфигурация thinkorm. Формат конфигурации такой же, как у webman, и эти конфигурации будут автоматически распознаны и объединены в зависимости от конфигурации.
Для использования, обращайтесь с префиксомplugin
, например config('plugin.foo.admin.app');
Экспорт плагина
Когда мы завершили разработку плагина, мы выполняем следующую команду для его экспорта
php webman plugin:export --name=foo/admin
Экспортировать
Пояснение
После экспорта каталог config/plugin/foo/admin будет скопирован в vendor/foo/admin/src, и одновременно будет автоматически сгенерирован файл Install.php, который используется для выполнения некоторых операций при автоматической установке и деинсталляции.
Операция установки по умолчанию — это копирование конфигурации из vendor/foo/admin/src в текущий проект config/plugin.
При удалении операция по умолчанию — это удаление файлов конфигурации из текущего проекта config/plugin.
Вы можете изменить Install.php, чтобы выполнить некоторые настраиваемые операции при установке и удалении плагина.
Публикация плагина
- Предположим, у вас уже есть учетные записи на github и packagist.
- Создайте проект admin на github и загрузите код, предположим, адрес проекта
https://github.com/ваше_имя/admin
. - Перейдите по адресу
https://github.com/ваше_имя/admin/releases/new
, чтобы создать новый релиз, напримерv1.0.0
. - Перейдите на packagist, нажмите на навигации
Submit
, отправьте адрес вашего проекта на githubhttps://github.com/ваше_имя/admin
, чтобы завершить публикацию плагина.
Совет
Если при подаче плагина наpackagist
возникают конфликты, попробуйте изменить имя поставщика, например изменитьfoo/admin
наmyfoo/admin
.
В дальнейшем, когда ваш код плагина будет обновлен, вам необходимо синхронизировать код с github, а затем снова перейти по адресу https://github.com/ваше_имя/admin/releases/new
, чтобы создать новый релиз, а затем на странице https://packagist.org/packages/foo/admin
нажать кнопку Update
, чтобы обновить версию.
Добавление команд к плагину
Иногда нашему плагину нужны некоторые пользовательские команды для предоставления дополнительных функций, например, после установки плагина webman/redis-queue
проект автоматически добавляет команду redis-queue:consumer
, и пользователь может просто выполнить php webman redis-queue:consumer send-mail
, чтобы в проекте был создан класс потребителя SendMail.php, что помогает в быстрой разработке.
Предположим, что плагин foo/admin
необходимо добавить команду foo-admin:add
, следуя приведенным ниже шагам.
Создание команды
Создание файла команды 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 = 'Описание командной строки';
/**
* @return void
*/
protected function configure()
{
$this->addArgument('name', InputArgument::REQUIRED, 'Добавить имя');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument('name');
$output->writeln("Admin добавлен $name");
return self::SUCCESS;
}
}
Внимание
Чтобы избежать конфликтов команд между плагинами, рекомендуется использовать формат команды командной строкипоставщик-плагин:конкретная команда
, например, все команды плагинаfoo/admin
должны начинаться с префиксаfoo-admin:
, например,foo-admin:add
.
Добавление конфигурации
Создание конфигурации config/plugin/foo/admin/command.php
<?php
use Foo\Admin\FooAdminAddCommand;
return [
FooAdminAddCommand::class,
// ....можно добавить несколько конфигураций...
];
Совет
command.php
используется для конфигурации пользовательских команд плагина, каждый элемент массива соответствует классу командной строки, а каждый класс соответствует одной команде. Когда пользователь выполняет команду,webman/console
автоматически загружает все пользовательские команды, установленные вcommand.php
для каждого плагина. Чтобы узнать больше о командах командной строки, см. Командная строка.
Выполнение экспорта
Выполните команду php webman plugin:export --name=foo/admin
, чтобы экспортировать плагин и отправить его на packagist
. После этого, когда пользователь устанавливает плагин foo/admin
, будет добавлена команда foo-admin:add
. Выполнение php webman foo-admin:add jerry
выведет Admin добавлен jerry
.