Данный пакет позволяет устаналивать совместимые с Extas'ом сущности.
- PHP 7.4+
- MongoDB 3+
# composer require jeyroik/extas-installer:*
# 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
- Создаём класс сущности.
namespace my\extas;
use extas\components\Item;
class My extends Item
{
protected function getSubjectForExtension(): string
{
return 'my';
}
}
- Создаём репозиторий для сущности.
Из коробки 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
.
- Придумываем имя секции для нашей сущности в конфигурации.
Пусть будет my_names
.
- Создаём плагин для установки нашей сущности.
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;
}
- Добавляем плагин и интерфейс репозитория в нашу конфигурацию для 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"}
]
}
- Устанавливаем плагин.
# vendor/bin/extas i