jeyroik/extas-installer

There is no license information available for the latest version (3.6.2) of this package.

Extas installer package


README

tests codecov.io 68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f66653665633430343465393534383430373162352f6d61696e7461696e6162696c697479 Latest Stable Version Total Downloads Dependents

Описание

Данный пакет позволяет устаналивать совместимые с Extas'ом сущности.

Требования

  • PHP 7.4+
  • MongoDB 3+

Установка

Установка пакета

# composer require jeyroik/extas-installer:*

Инициализация Extas'a

# vendor/bin/extas init

Эта команда создаст дефолтные контейнеры классов и установит корневые плагины и расширения.

У инициализации имеются следующие стадии (для всех стадий имеются соответствующие интерфейсы):

  • extas.init: на этой стадии можно провести дополнительные операции по инициализации пакета.
  • extas.init.section: на этой стадии можно провести дополнительные операции по инициализации секции.
  • extas.init.item: на этой стадии можно провести дополнительные операции по инициализации конкретного элемента.

После данной операции установлены все минимально-необходимые плагины и расширения. Если необходимо, чтобы плагин/расширение были установлены данной командой, то необходимо в конфигурации плагина/расширения добавить:

  • install_on: initialization
  • Пример:
{
  "plugins": [
    {
      "class": "my\\Plugin",
      "stage": "my.stage",
      "install_on": "initialization"
    }
  ]
}

Установка сущностей

# vednor/bin/extas install -a my_app (короткая форма: extas i -a my_app)

Установка состоит из двух шагов:

  • Сбор конфигураций пакетов.
  • Установка найденных пакетов.

Имеется возможность с помощью плагинов подключиться к любому моменту в этих двух шагах (для всех стадий имеются соответствующие интерфейсы), стадии указаны по порядку срабатывания:

  • extas.crawl.packages: срабатывает после сбора конфигураций.
  • extas.install.<application.name>: <application.name> берётся из опции -a команды установки.
  • extas.install: на данном этапе есть возможность подключить собственный установщик для реализации какой-то особенной логики установки пакетов.
  • extas.install.package.<package.name>: <package.name> берётся из конфигурации пакета. На данном этапе можно провести дополнительные операции по установки пакета.
  • extas.install.package: стадия, аналогичная предыдущей.
  • extas.install.section.<section.name>: <section.name> - имя секции в конфигурации. На данном этапе можно провести дополнительные операции по установке секции.
  • extas.install.section: стадия, аналогичная предыдущей.
  • extas.install.section.<section.name>.item: на данном этапе можно провести дополнительные операции по установке конкретного элемента сущности.
  • extas.install.item: стадия, аналогичная предыдущей.

Удаление сущностей

  • # vendor/bin/extas uninstall (короткая форма extas u)

Для удаления также доступны стадии:

  • extas.uninstall.<application.name>
  • extas.uninstall.package.<package.name>
  • extas.uninstall.package
  • extas.uninstall.section.<section.name>
  • extas.uninstall.section
  • extas.uninstall.item.<section.name>
  • extas.uninstall.item

Создание и установка пользовательской сущности

  1. Создаём класс сущности.
namespace my\extas;

use extas\components\Item;

class My extends Item
{
    protected function getSubjectForExtension(): string
    {
        return 'my';
    }
}
  1. Создаём репозиторий для сущности.

Из коробки Extas поддерживает MongoDB.

namespace my\extas;

use extas\components\repositories\Repository;

class MyRepository extends Repository
{
    protected string $pk = 'name';
    protected string $itemClass = My::class;
    protected string $scope = 'my';
    protected string $name = 'names';
}

В результате использования данного репозитория, будет создана коллекция my__names.

  1. Придумываем имя секции для нашей сущности в конфигурации.

Пусть будет my_names.

  1. Создаём плагин для установки нашей сущности.
namespace my\extas;

use extas\components\plugins\install\InstallSection;

class PluginInstallMyNames extends InstallSection
{
    protected string $selfSection = 'my_names';
    protected string $selfName = 'my name';
    protected string $selfRepositoryClass = 'myRepository';
    protected string $selfUID = 'name';
    protected string $selfItemClass = My::class;
}
  1. Добавляем плагин и интерфейс репозитория в нашу конфигурацию для extas'a.

По умолчанию, конфигурация находится в корне в файле с именем extas.json. Вы можете использовать любое имя - в этом случае не забудьте указать его в флаге -p при установке (см. ниже).

example.json

{
    "name": "example",
    "plugins": [
        {"class": "my\\extas\\PluginInstallMyNames", "stage": "extas.install.section.my_names"}
    ],
    "my_names": [
        {"name": "Example 1"},
        {"name": "Example 2"}
    ],
    "package_classes": [
      {"interface": "myRepository", "class": "my\\extas\\MyRepository"}
    ]
}
  1. Устанавливаем плагин.

# vendor/bin/extas i