ฉันมีแบบฟอร์มการตั้งค่าที่บันทึกข้อมูลการกำหนดค่าทั่วทั้งไซต์
ฟังก์ชันแบบฟอร์มการส่งของฉันมีลักษณะดังนี้
$ข้อมูล = [];
foreach ($groups เป็น $key) {
$data[$key] = $form_state->getValue($key);
ถ้า (ว่าง ($data[$key])) {
$data[$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->save();
$form_state->setRebuild();
}
ปัญหาของฉันคือว่า ชุด เมธอดยอมรับสตริงไม่ใช่อาร์เรย์ หากฉันสามารถระบุสตริงได้ ฉันจะตั้งค่าของบางสิ่งที่ซ้อนอยู่ในอาร์เรย์การกำหนดค่าของฉันได้อย่างไร การใช้ set เป็นตัวเลือกหรือไม่? หรือฉันต้องหันไปใช้ setData?