Процесс создания и публикации базового плагина

Принцип

  1. Например, для кросс-доменного плагина плагин состоит из трех частей: файл программы посредника для кросс-доменной среды, конфигурационный файл посредника middleware.php и Install.php, созданный через команду.
  2. Мы используем команду для упаковки и публикации этих трех файлов в композере.
  3. При установке пользователем кросс-доменного плагина через композер, Install.php плагина скопирует файл программы посредника для кросс-доменной среды и конфигурационный файл в {основной проект}/config/plugin, чтобы webman мог их загрузить. Это позволяет автоматически применять конфигурацию файлов программы посредника для кросс-доменной среды.
  4. При удалении пользователем этого плагина через композер, Install.php будет удалять соответствующие файлы программы посредника для кросс-доменной среды и конфигурационные файлы, что позволяет автоматически удалять плагин.

Стандарт

  1. Название плагина состоит из двух частей, производителя и названия плагина, например webman/push, соответствует имени композер-пакета.
  2. Конфигурационные файлы плагина должны находиться в config/plugin/производитель/название плагина/(команда консоли автоматически создает каталог конфигурации). Если плагину не требуется конфигурация, необходимо удалить автоматически созданный каталог конфигурации.
  3. Каталог конфигурации плагина поддерживает только следующие файлы: app.php (основная конфигурация плагина), bootstrap.php (конфигурация запуска процесса), route.php (конфигурация маршрута), middleware.php (конфигурация посредников), process.php (пользовательская конфигурация процесса), database.php (конфигурация базы данных), redis.php (конфигурация Redis), thinkorm.php (конфигурация ThinkORM). Эти конфигурации автоматически распознаются webman.
  4. Для получения конфигурации плагина используйте следующий метод: config('plugin.производитель.название плагина.имя_конфигурации.конкретный_элемент_конфигурации'), например config('plugin.webman.push.app.app_key').
  5. Если у плагина есть собственная конфигурация базы данных, обращайтесь к ней следующим образом: illuminate/database - Db::connection('plugin.производитель.название плагина.конкретное_подключение'), thinkorm - Db::connect('plugin.производитель.название плагина.конкретное_подключение').
  6. Если плагину необходимо размещать файлы бизнес-логики в каталоге app/, убедитесь, что они не конфликтуют с проектом пользователя и другими плагинами.
  7. Плагины должны избегать копирования файлов или каталогов в основной проект, например, при кросс-доменном плагине помимо конфигурационных файлов, файлы программы посредника должны находиться в vendor/webman/cros/src и не копироваться в основной проект.
  8. Для именования пространства имен плагина рекомендуется использовать заглавные буквы, например 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 в панели навигации, и предоставьте адрес вашего проекта на Github https://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.