Score:0

จะเก็บค่าเซฟของฟิลด์เพิ่มเติมจากต้นฉบับได้อย่างไร

ธง kz

ฉันมีประเภทฟิลด์แบบกำหนดเองที่ฉันสร้างด้วยโมดูลแบบกำหนดเอง เป็นฟิลด์ข้อความธรรมดาที่ผู้ใช้พิมพ์สตริง ฉันต้องการเก็บสำเนาของฟิลด์นี้ไว้สองชุด:

  1. ค่าสตริงตรงตามที่ผู้ใช้พิมพ์
  2. ค่าที่ปลอดภัยของสตริงเดียวกัน

นี่คือวิธีที่ฉันสร้างฟิลด์:

คลาส MyItem ขยาย FieldItemBase {

  /**
   * {@inheritdoc}
   */
  สคีมาของฟังก์ชันสแตติกสาธารณะ (FieldStorageDefinitionInterface $field_definition) {
    กลับ [
      'คอลัมน์' => [
        'ค่า' => [
          'ประเภท' => 'ข้อความ',
          'ขนาด' => 'เล็ก',
          'ไม่เป็นโมฆะ' => FALSE
        ]
        'ค่าที่ปลอดภัย' => [
          'ประเภท' => 'ข้อความ',
          'ขนาด' => 'เล็ก',
          'ไม่เป็นโมฆะ' => FALSE
        ]
      ]
    ];
  }
¦

}

ฉันคิดว่าฉันควรสร้างไฟล์ มูลค่าความปลอดภัย ของสตริงใน hook_node_presave() และเข้าไปในเอนทิตีที่นั่น (แต่ยินดีต้อนรับการแก้ไขสมมติฐานเหล่านี้)

ฉันไม่มีปัญหาในการรับค่าสตริงตามที่ผู้ใช้พิมพ์และคำนวณค่าที่ปลอดภัย:

$value = $entity->field_myfield->getString();
$safevalue = makeSafe($value);

แต่ไม่รู้จะรับยังไง. $มูลค่าที่ปลอดภัย เก็บไว้ในฐานข้อมูล

แก้ไข

ฉันเห็นว่านี่มีสองคำตอบที่เกือบจะเหมือนกัน ทั้งสองทำงานได้ดีถ้าจำนวนสมาชิกของฟิลด์เป็นหนึ่ง ดังนั้นฉันจึงโหวตให้ทั้งคู่ เนื่องจากฉันไม่สามารถรับทั้งสองได้ ฉันจึงยอมรับจาก apaderno สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ นิยามคุณสมบัติ().

ฉันยังไม่สามารถทำให้สิ่งนี้ทำงานกับฟิลด์ที่มีหลายค่าได้ แต่ฉันคิดว่าอาจต้องเป็นคำถามแยกต่างหาก

Score:2
ธง us

ถ้า ปลอดภัยค่า ถูกกำหนดเป็นคุณสมบัติของฟิลด์ใน นิยามคุณสมบัติ()สามารถเข้าถึงได้เป็น $entity->field_myfield->safeValueไม่ว่าจะอ่านหรือเขียน

ใน Drupal core ตัวอย่างของฟิลด์ที่เก็บสำเนาที่ประมวลผลแล้วของค่าฟิลด์คือ the รายการข้อความ ชั้นซึ่ง นิยามคุณสมบัติ() วิธีการประกอบด้วยรหัสต่อไปนี้

$properties['value'] = DataDefinition::create('สตริง')
  ->setLabel(t('ข้อความ'))
  ->setRequired(จริง);
$properties['format'] = DataDefinition::create('filter_format')->setLabel(t('รูปแบบข้อความ'));
$properties['ประมวลผล'] = DataDefinition::create('string')
  ->setLabel(t('ข้อความที่ประมวลผล'))
  ->setDescription(t('ข้อความที่ใช้รูปแบบข้อความ'))
  ->ตั้งค่าการคำนวณ (จริง)
  ->setClass('\Drupal\text\TextProcessed')
  ->setSetting('แหล่งข้อความ', 'ค่า')
  ->setInternal(เท็จ);

คลาสนั้นกำหนดคุณสมบัติตามที่คำนวณ นั่นเป็นเหตุผลที่มัน สคีมา () วิธีการไม่รวมคุณสมบัตินั้น

Score:2
ธง cn

เพื่อประหยัด:

$value = $entity->field_myfield->getString();
$entity->field_myfield->safevalue = makeSafe($value);

สำหรับการโหลด:

$safe_value = $entity->field_myfield->safevalue;

โพสต์คำตอบ

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