Добрый день!
Не могу разобраться, нужно создать программно директории при установке определенного пакета. Есть
некоторые модули и есть один
базовый модуль (vendor/username/core), внутри которого в папке ( ..repo../modules) должны находиться те самые
некоторые модули.
У меня есть кастомный инсталяттор, он прекрасно работает(устанавливает пакеты в определенные директории по типу этого пакета), но проблема в том, что все эти
некоторые модули идут в зависимостях в
базовом модуле и должны храниться ВНУТРИ него и посему при установке:
composer require username/core
они идут в разнобой, т.е могут установиться раньше базового модуля:
- installing module1
- installing module2
- installing
core
- installing moduleN
Соответственно те, что установились раньше
базового модуля не будут установлены, как решить это, я добавил новый класс в инсталлятор:
/**
* <code>
* "extra": {
* "encore-composer-mkdir": [
* "vendor/username/core/modules",
* "folder2/folde22"
* ]
* }
* </code>
*
*/
class ScriptHandlerHelper
{
public static function mkdirs(Event $event)
{
$extras = $event->getComposer()->getPackage()->getExtra();
if (! isset($extras['composer-mkdir'])) {
$message = 'The mkdir handler needs to be configured through the extra.composer-mkdir setting.';
throw new InvalidArgumentException($message);
}
if (! is_array($extras['composer-mkdir'])) {
$message = 'The extra.composer-mkdir setting must be an array.';
throw new InvalidArgumentException($message);
}
$legacy = array_filter($extras['composer-mkdir'], function ($directory) {
return !is_string($directory);
});
if (!empty($legacy)) {
$message = 'Since 2.0, mode is no longer supported. See UPGRADE-2.0.md for further details.';
throw new InvalidArgumentException($message);
}
$directories = array_filter($extras['composer-mkdir'], function ($directory) {
return !file_exists($directory);
});
foreach ($directories as $directory) {
mkdir($directory, 0777, true);
}
}
}
и в composer.json инсталлятора(я правильно сделал??) прописал:
"scripts": {
"post-package-install": [
//МБ это вариант?
],
"post-install-cmd": [
"username\\CustomInstaller\\ScriptHandlerHelper::mkdirs"
],
"post-update-cmd": [
"username\\CustomInstaller\\ScriptHandlerHelper::mkdirs"
]
},
"extra": {
"composer-mkdir": [
"vendor/username/core/modules" - данные пути должны создаться
]
},
Но реакции никакой, как правильно создавать директории при установке?
Прошу прощения за многоватость текста :)