Рейтинг:2

Обновить FieldStorageConfig для поля в хуке обновления правильно?

флаг in

Мне нужно обновить параметр разрешенных значений в поле list_integer. По причинам на данный момент я не могу просто обновить и экспортировать конфигурацию и импортировать ее в производство, пока мы не реализуем config_ignore. Я также не хочу редактировать несколько типов блоков, чтобы обновить несколько полей, появляющихся в нескольких средах, поэтому, если я могу написать сценарий и сэкономить время, это то, что я хочу сделать.

В хуке обновления я пытаюсь сделать это:

/**
 * Обновите параметры результата для поля Result Count.
 */
функция mymodule_update_8001(&$песочница) {
  $allowed_values ​​= [];

  для ($x = 1; $x < 16; $x++) {
    $allowed_values[$x] = (строка) $x;
  }

  $allowed_values[50] = '50';
  $allowed_values[75] = '75';
  $allowed_values[100] = '100';

  $old_config = FieldStorageConfig::load('block_content.field_result_count');
  $new_config = $old_config->createDuplicate();
  $new_config->исходный = $new_config;
  $new_config->enforceIsNew(FALSE);
  $new_config
    ->setSetting('разрешенные_значения', $разрешенные_значения)
    -> сохранить();
}

Казалось, что нужно добавить новые значения в поле, но терминал выдал это при запуске обновления базы данных:

> [предупреждение] assert(): невозможно загрузить сущность field_storage_config с нулевым идентификатором. ошибка EntityStorageBase.php:249
> [предупреждение] array_flip(): может переворачивать только значения STRING и INTEGER! EntityStorageBase.php:266

Это правильный способ обновить существующее поле?

4uk4 avatar
флаг cn
Разве вы не можете просто загрузить, изменить и сохранить объект конфигурации? Вам нужны три дополнительные строки для создания дубликата?
Kevin avatar
флаг in
То есть дубликат не нужен? Исчез пример, который я видел в Интернете.
4uk4 avatar
флаг cn
Нет, клонирование и установка оригинала выполняется ядром автоматически, если это необходимо. Пример, вероятно, взят из основных базовых классов сущностей.
Рейтинг:2
флаг in

Изначально почти так и было, но благодаря 4k4 это один из способов дополнить список допустимых значений новыми значениями:

/**
 * Реализует hook_install().
 *
 * Первое действие обновляет параметры результата для поля Result Count.
 * Параметры должны быть 1-15, 50, 75 и 100.
 */
функция mymodule_update_8001(&$песочница) {
  $allowed_values ​​= [];

  для ($x = 1; $x < 16; $x++) {
    $allowed_values[$x] = (строка) $x;
  }

  $allowed_values[50] = '50';
  $allowed_values[75] = '75';
  $allowed_values[100] = '100';

  $config = FieldStorageConfig::load('ENTITY_TYPE.FIELD_ID');
  $config
    ->setSetting('разрешенные_значения', $разрешенные_значения)
    -> сохранить();
}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.