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

Принцип

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

Нормы

  1. Имя плагина состоит из двух частей: поставщик и имя плагина, например webman/push, что соответствует имени пакета composer.
  2. Конфигурационные файлы плагина должны храниться в каталоге config/plugin/поставщик/имя плагина/ (каталог конфигурации будет создан автоматически при выполнении команды console). Если плагин не требует конфигурации, то автоматически созданный каталог конфигурации нужно удалить.
  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.поставщик.имя плагина.конкретное соединение'), thinkrom для Db::connct('plugin.поставщик.имя плагина.конкретное соединение').
  6. Если плагин должен размещать файлы бизнес-логики в каталоге app/, необходимо убедиться, что они не конфликтуют с пользовательским проектом и другими плагинами.
  7. Плагин должен избегать копирования файлов или каталогов в главный проект, например, файл промежуточного ПО кросс-доменных запросов должен находиться в vendor/webman/cros/src, а не в главном проекте.
  8. Рекомендуется использовать заглавные буквы для пространства имен плагина, например 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, отправьте адрес вашего проекта на 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("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.