Score:1

ตั้งค่าที่ซ้อนกันในการกำหนดค่าที่จัดเก็บได้

ธง cn

ฉันมีแบบฟอร์มการตั้งค่าที่บันทึกข้อมูลการกำหนดค่าทั่วทั้งไซต์ ฟังก์ชันแบบฟอร์มการส่งของฉันมีลักษณะดังนี้

$ข้อมูล = [];
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?

Score:2
ธง cn

พารามิเตอร์แรกคือสตริงที่มีคีย์ซ้อนกันโดยคั่นด้วยจุด พารามิเตอร์ที่สองคือค่า ซึ่งไม่จำเป็นต้องเป็นสตริง นอกจากนี้ยังสามารถเป็นอาร์เรย์:

$config->set('campaigns.campaign_ids', ['abc','def','ghi','jkl']);
Matt avatar
cn flag
ได้ผล ขอบคุณ!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา