На любом этапе обмена можно запросить у пользователя настройку, которая будет заполнена на этапе создания обмена и доступна на момент запуска.
Настройки в iikoWeb рисуются для пользователя в Angular приложении, которому backEnd часть iikoWeb посредством REST API выдает в формате JSON.
Сохранением и заполнением настроек занимается iikoWeb. Все настройки заранее берутся из базы данных и записываются в класс, чтобы их можно было получить. Таким образом избегается необходимость обращения к хранилищу настроек.
- строка (ConfigItemString)
- массив (ConfigItemTags)
- одно из выбора значений (ConfigItemSelect)
- период (ConfigItemPeriod)
- пароль (ConfigItemPassword)
- несколько из выбора значений (ConfigItemMultiSelect)
- число (ConfigItemInt)
- выражение crontab (ConfigItemCronExpression)
- булеан (ConfigItemBoolean
Для того, чтобы класс смог выдать настройки пользователю, нужно использовать интерфейс ConfigurableExtensionInterface и trait ConfigurableExtensionTrait.
Т.к. внутри trait ConfigurableExtensionTrait есть метод jsonSerialize, который и позволяет отдавать настройки через JSON, он будет конфликтовать с вашим внутренним jsonSerialize. Чтобы решить эту проблему необходимо использовать trait
use ConfigurableExtensionTrait
{
ConfigurableExtensionTrait::jsonSerialize as public configJsonSerialize;
}
и добавить в ваш метод jsonSerialize. Например:
public function jsonSerialize()
{
return ['some_key' => 'some_value'] + $this->configJsonSerialize();
}
Далее необходимо определить (при подключенном trait ConfigurableExtensionTrait - переопределить)
метод exposeConfiguration
.
# Пример определения настроек
const CONFIG_SOMEVALUE = 'SOMEVALUE';
public function exposeConfiguration(): array
{
return
[
new ConfigItemMultiSelect(self::CONFIG_SOMEVALUE, "ServiceProduct", null, false)];
];
}
где
ServiceProduct
- это код OptionSet- null - значение по умолчанию
- false - признак того, что поле обязательно для заполнения
Получить настройку можно вызовом метода getConfigValue
$this->getConfigValue(self::CONFIG_ITEM_VENDOR_ID)