Рейтинг:3

Правильное хранение массива в объекте конфигурации

флаг in

В объекте конфигурации я хочу сохранить массив значений. Ключи имеют значение. Сохраненное значение поступает из элемента флажков, поэтому массив будет выглядеть примерно так:

['статья' => 'статья', 'страница' => 'страница']

Вот схема конфигурации:

мой модуль. настройки:
  тип: config_entity
  label: 'Настройки хлебных крошек Mymodule'
  сопоставление:
    узлы_связки:
      тип: отображение
      label: 'Объединить имена машин.'

На первый взгляд это работает, но запуск функционального теста приводит к следующему:

Ошибки схемы для mymodule.settings со следующими ошибками: mymodule.settings:node_bundles.page схема отсутствует

что заставляет меня добавить:

защищенная $strictConfigSchema = FALSE;

затем тесты проходят, но затем срабатывает ошибка стандартов кодирования Drupal.

Какое правильное определение схемы мне нужно?

Рейтинг:4
флаг in

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

От Схема/метаданные конфигурации:

sequence: Свойство значения типа последовательности, используемое для определения произвольного списка определенных значений. В последовательности ключи являются необязательными и могут быть целыми числами или строками и не отображаются явно. В схеме должны быть определены только типы значений.

Далее в той же документации мы видим примеры для Определения последовательности. Второй пример, Определение новой схемы, очень похоже на ваш случай.

Определение схемы:

домен.язык_переговоров:
  тип: config_object
  label: 'Переговоры о языке домена'
  сопоставление:
    домен_язык:
      тип: последовательность
      label: "Домены"
      последовательность:
        тип: строка
        label: 'Сопоставление языкового кода'

Пример конфигурации, поддерживаемой приведенным выше определением схемы:

домен_язык:
  пример_локальный: ru
  one_example_local: аф
  two_example_local: аф
  three_example_local: ru
  four_example_local: ru

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

мой модуль. настройки:
  тип: config_entity
  label: 'Настройки хлебных крошек Mymodule'
  сопоставление:
    узлы_связки:
      # Переход от сопоставления к последовательности
      тип: последовательность
      label: 'Объединить имена машин.'
      # NEW: опишите ваши значения последовательности.
      последовательность:
        тип: строка
        label: 'что бы вы ни назвали "значениями" вашего массива node_bundles'
Kevin avatar
флаг in
Я попытался изменить последовательность, затем тест сообщает: «Ошибки схемы для mymodule.settings со следующими ошибками: mymodule.settings:node_bundles.0 отсутствует схема "
sonfd avatar
флаг in
Обновлено тем, что, как я считаю, должно решить вашу проблему.
Kevin avatar
флаг in
Это сработало, спасибо. Теперь я могу отказаться от строгой проверки, и линтер в порядке.

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

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