Score:0

แนวทางปฏิบัติที่ดีที่สุดสำหรับการรับค่าฟิลด์ของสายเอนทิตี

ธง cn

ฉันต้องการทำให้ค่าฟิลด์ if/else นี้ตรวจสอบเซ็กซี่ขึ้นอีกนิด

วิธีปฏิบัติที่ดีที่สุดสำหรับการจัดการกับกลุ่มฟังก์ชันที่ซ้อนกันเพื่อรับค่าฟิลด์เอนทิตีคืออะไร (ตรวจสอบว่ามีอยู่หรือไม่ / ตรวจสอบหากไม่ว่างเปล่า)

 ถ้า($entity->hasField('field_intro_teaser_image_media_')){
      $media_field = $entity->field_intro_teaser_image_media_;

      ถ้า($media_field->entity){
        $media_field_entity = $media_field->เอนทิตี;

        ถ้า($media_field_entity->hasField('field_media_image')){
          $media_field_entity_image = $media_field_entity->field_media_image;

          ถ้า($media_field_entity_image){
            $media_field_entity_image_entity = $media_field_entity_image->เอนทิตี;

            ถ้า($media_field_entity_image_entity){
              $media_field_entity_image_entity_uri = $media_field_entity_image->entity->getFileUri();

              ถ้า($media_field_entity_image_entity_uri){

                // ... เย้ พวกเราโดน uri!

              }

            }
          }
        }
      }
    }

สายการบินหนึ่งจะเป็น:

$media_field = $entity->field_intro_teaser_image_media_->entity->field_media_image->entity->getFileUri();



  
cn flag
Not tried it on entity fields yet, but [Null-safe operator](https://php.watch/versions/8.0/null-safe-operator)?
Kevin avatar
in flag
The one liner would fail if anything in the chain does not have the field or relational entity, so you'd want to wrap it in a try catch statement.
4uk4 avatar
cn flag
หรือใช้ Twig โปรดดู https://drupal.stackexchange.com/questions/271579/get-video-url-from-media-entity-reference-field Twig เป็นค่าว่างโดยค่าเริ่มต้น หากคุณไม่ได้ตั้งค่า string_variables
Score:1
ธง de

สมมติว่าคุณสร้าง chain ถูกต้องแล้ว คุณสามารถทำได้ดังนี้:

$media_field = โมฆะ;
พยายาม {
  $media_field = $entity->field_intro_teaser_image_media_->entity->field_media_image->entity->getFileUri();
}
จับ (\ ข้อยกเว้น $e) {
  watchdog_exception('การดึงสื่อ');
}

ถ้า (!is_null($media_field)) {
  //ทำของ.
}
mogio avatar
cn flag
ขอบคุณ. ฉันทำแบบนี้
Score:1
ธง us

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

$entity->field_that_does_not_exist->entity; // โมฆะ.
$entity->get('field_that_does_not_exist'); // ข้อยกเว้น
$entity->get('field_that_does_not_exist')->เอนทิตี; // ข้อยกเว้น

โดยใช้ $entity->field_intro_teaser_image_media_->เอนทิตี ก็เพียงพอแล้วในกรณีนี้ หากไม่มีฟิลด์ นิพจน์จะเป็นแบบง่ายๆ โมฆะโดยไม่มีข้อผิดพลาดใดๆ

แต่แน่นอนว่าคุณยังต้องตรวจสอบว่ามีการอ้างอิงหรือไม่ -> เอนทิตี ไม่ใช่ โมฆะ. ตัวดำเนินการ PHP 8.0 Null-safe อาจเป็นวิธีที่ทำได้ตามคำแนะนำ ไคลฟ์.

$media_field = $นิติบุคคล
  ->field_intro_teaser_image_media_
  -> เอนทิตี
  ?->field_media_image
  -> เอนทิตี
  ?->getFileUri();

ในกรณีที่ใช้ตัวดำเนินการ Null-safe การเข้าถึงฟิลด์เอนทิตีอาจเร็วกว่า -> รับ ()เพื่อหลีกเลี่ยงตรรกะเพิ่มเติม

$media_field = $นิติบุคคล
  ->รับ('field_intro_teaser_image_media_')
  ?->นิติบุคคล
  ?->get('field_media_image')
  ?->นิติบุคคล
  ?->getFileUri();

mogio avatar
cn flag
ขอบคุณ . รักตัวดำเนินการที่ปลอดภัย Null ไม่เคยใช้มันมาก่อน

โพสต์คำตอบ

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