bitrix-migrations
bitrix-migrations copied to clipboard
Проблема с автоматическими миграциями на добавление пользовательских полей
При создании автомиграции массив fields формируется некорректно.
Фрагмент результирующего кода метода up():
public function up()
{
$fields = array (
'ENTITY_ID' => 'HLBLOCK_4',
'FIELD_NAME' => 'UF_NAME',
'USER_TYPE_ID' => 'string',
'XML_ID' => '',
'SORT' => 200,
'MULTIPLE' => 'N',
'MANDATORY' => 'Y',
'SHOW_FILTER' => 'N',
'SHOW_IN_LIST' => 'Y',
'EDIT_IN_LIST' => 'Y',
'IS_SEARCHABLE' => 'N',
'SETTINGS' => 'a:6:{s:4:"SIZE";i:20;s:4:"ROWS";i:1;s:6:"REGEXP";N;s:10:"MIN_LENGTH";i:0;s:10:"MAX_LENGTH";i:0;s:13:"DEFAULT_VALUE";N;}',
'LIST_FILTER_LABEL' =>
array (
'ru' => 'Название',
),
'LIST_COLUMN_LABEL' =>
array (
'ru' => 'Название',
),
'EDIT_FORM_LABEL' =>
array (
'ru' => 'Название',
),
);
$this->addUF($fields);
}
Проблемный участок в STTINGS
s:6:"REGEXP";N;
при применении такой миграции в поле "регулярное выражение для проверки" и "значение по умолчанию" попадает "a"
что при попытке создания элемента приведет к ошибке формата
Поле "Название" не удовлетворяет проверочному регулярному выражению.
После настройки поля вручную в таблице данный блок выглядит как
s:6:"REGEXP";s:0:"";
Уточнение, если SETTINGS вставить как в таблице b_user_field сериализованным массивом то поле создастся все равно не корректно, т.к. в методе CUserTypeEntity::add данное поле сериализуется без проверки, т.е. подразумевается передача массива в данный метод.
Нужно делать предобработку поля "SETTINGS" на этапе создания файла миграции
Здравствуйте, проблема актуальна?)