Процесс создания и публикации базового плагина
Принцип
- Например, для кросс-доменного плагина плагин состоит из трех частей: файл программы посредника для кросс-доменной среды, конфигурационный файл посредника middleware.php и Install.php, созданный через команду.
- Мы используем команду для упаковки и публикации этих трех файлов в композере.
- При установке пользователем кросс-доменного плагина через композер, Install.php плагина скопирует файл программы посредника для кросс-доменной среды и конфигурационный файл в
{основной проект}/config/plugin
, чтобы webman мог их загрузить. Это позволяет автоматически применять конфигурацию файлов программы посредника для кросс-доменной среды. - При удалении пользователем этого плагина через композер, Install.php будет удалять соответствующие файлы программы посредника для кросс-доменной среды и конфигурационные файлы, что позволяет автоматически удалять плагин.
Стандарт
- Название плагина состоит из двух частей,
производителя
иназвания плагина
, напримерwebman/push
, соответствует имени композер-пакета. - Конфигурационные файлы плагина должны находиться в
config/plugin/производитель/название плагина/
(команда консоли автоматически создает каталог конфигурации). Если плагину не требуется конфигурация, необходимо удалить автоматически созданный каталог конфигурации. - Каталог конфигурации плагина поддерживает только следующие файлы: 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.производитель.название плагина.конкретное_подключение')
,thinkorm
-Db::connect('plugin.производитель.название плагина.конкретное_подключение')
. - Если плагину необходимо размещать файлы бизнес-логики в каталоге
app/
, убедитесь, что они не конфликтуют с проектом пользователя и другими плагинами. - Плагины должны избегать копирования файлов или каталогов в основной проект, например, при кросс-доменном плагине помимо конфигурационных файлов, файлы программы посредника должны находиться в
vendor/webman/cros/src
и не копироваться в основной проект. - Для именования пространства имен плагина рекомендуется использовать заглавные буквы, например Webman/Console.
Пример
Установите команду webman/console
composer require webman/console
Создание плагина
Предположим, что мы создаем плагин с именем foo/admin
(имя, под которым плагин будет опубликован в композере, должно быть в нижнем регистре).
Запустите команду:
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, и эти конфигурации автоматически распознаются 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
в текущий каталог конфигураций проекта.
При удалении по умолчанию будут удалены файлы конфигурации из текущего каталога конфигураций проекта.
Вы можете изменить Install.php, чтобы выполнять некоторые пользовательские операции при установке и удалении плагина.
Публикация плагина
- Предположим, у вас уже есть учетные записи на github и packagist
- На github создайте проект admin и загрузите туда код. Предположим, что адрес проекта -
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("Добавление администратора $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
, чтобы вывести Добавление администратора jerry
.