Ниже описан процесс работы extension manager-а с расширениями.
Имеют bootstrap, который за счёт yii2-composer автоматически цепляется приложением yii2. Применение миграций в данном случае остается на совести пользователя, поскольку расширения не указывают в явном виде, где лежат миграции.
Для стандартизации механизма применения миграций расширений yii2 мы предлагаем использовать тот же синтаксис, что и для расширений типа dotplant-extension
.
Для этого в секцию extra файла composer.json расширения необходимо добавить путь к миграциям migrationPath
относительно папки расширения, например:
{
"extra": {
"migrationPath": ["src/migrations/"],
"bootstrap": "Vendor\\Package\\YourYii2Bootstrap"
}
}
Эти расширения обязаны указывать путь к миграциям. Поэтому принцип их установки разделяется на следующие этапы:
- Выполнение команды
php composer.phar require package-vendor/package-name --working-dir=/path/to/application/extensions
- просто устанавливает расширение и его зависимости. После успешной установки появляется запись на страницеExtensions
- Когда composer-пакет установлен его можно активировать. Процесс активации запускается в следующем порядке:
- Добавление в
Yii::$app->params['yii.migrations']
путей, указанных в migrationPath composer.json пакета. Это можно сделать с помощьюBaseConfigurationModel::appParams
- Примение всех миграций
- Устанавка флага
is_active=1
у расширения - Запуск процесса переконфигурации приложения (перегенерация configurables)
- Добавление в
- Процесс деактивации аналогичен:
- Отмена миграций расширения
- Устанка флага
is_active=0
у расширения - Удаление путей до миграций из
Yii::$app->params['yii.migrations']
- Запуск процесса переконфигурации приложения
- Процесс удаления расширения (Uninstall):
- Деактивация расширения, если оно активно
- Выполнение воманды
php composer.phar remove package-vendor/package-name --working-dir=/path/to/application/extensions
- Удаление записи из
Extensions
Yii2 extensions manager использует composer-пакет wikimedia/composer-merge-plugin.
Он позволяет работать с несколькими composer.json
файлами одновременно.
Это позволяет не модифицировать composer.json
и composer.lock
вашего приложения, а значит исключает возможность конфликта при выполнении git pull
.
Основные работы производятся с локальными файлами, путь до которых задается в ExtensionsManager::$localExtensionsPath
(по умолчанию @app/extensions
).
Данный пакет позволяет выполнять команды в фоне с перенаправлением всего вывода в файл. Он используется при установке, удалении, активации и деактивации расширений. При выполнении этих операций пользователь может наблюдать за текущим состоянием процесса в модальном окне.
Для более удобного управления миграциями мы рекомендуем использовать пакет dmstr/yii2-migrate-command и выставлять параметр модуля ExtensionsManager::$autoDiscoverMigrations
в true
.
Таким образом, все миграции всех расширений будут автоматически добавляться в область видимости yii2-migrate-command
.
Некоторые операции менеджера требуют обращения к github API, который имеет ограничение - 60 запросов в час.
Для снятия этого лимита необходимо указать свой access token
в настройках менеджера расширений.
Для корректной работы необходима версия пакета dmstr/yii2-migrate-command
более или равная 0.3.1(присутствует в зависимостях yii2-extensions-manager).