Рейтинг:1

Установить вложенное значение в сохраняемой конфигурации

флаг cn

У меня есть форма настроек, которая сохраняет информацию о конфигурации сайта Моя функция отправки формы выглядит примерно так

$данные = [];
foreach ($groups как $key) {
  $data[$key] = $form_state->getValue($key);
  если (пусто ($ данные [$ ключ])) {
    $данные[$ключ] = [];
  }
}

$this->configFactory
  ->getEditable('my_config.settings')
  ->setData($данные)
  -> сохранить();

Моя проблема в том, что в обратном вызове я хотел бы иметь возможность напрямую устанавливать значение одного поля конфигурации, вложенного в этот массив данных, без повторного захвата всего, изменения массива данных и сброса его с помощью ->setData

Данные в моем массиве конфигурации выглядят так

[
    'num_campaigns'=> 4
    'кампании'=> [
        'campaign_ids' => ['abc','def','ghi','jkl']
    ]
]

И мой обратный вызов выглядит так

  публичная функция removeField (массив $ form, FormStateInterface $ form_state) {
    $config = $this->getConfig();
    $num_campaigns = $config['num_campaigns']-1;
    $config_factory = $this->configFactory->getEditable('my_config.settings');
    $config_factory->set('num_campaigns', $num_campaigns);
    $config_factory->set(['кампании','campaign_ids',$num_campaigns], '')
    $config_factory->сохранить();
    $form_state->setRebuild();
  }

Моя проблема в том, что установлен Метод принимает строку, а не массив. Если я могу предоставить только строку, как мне установить значение чего-то, что вложено в мой массив конфигурации? Является ли использование набора даже вариантом? Или мне нужно прибегнуть к использованию setData?

Рейтинг:2
флаг cn

Первый параметр — это строка с вложенными ключами, разделенными точками. Второй параметр — это значение, которое не обязательно является строкой. Это также может быть массив:

$config->set('campaigns.campaign_ids', ['abc','def','ghi','jkl']);
Matt avatar
флаг cn
Это сработало, спасибо!

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

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