Score:3

วิธีใดที่ดีกว่าในการฉีดบริการไปยังคอนโทรลเลอร์ด้วย __construct หรือ $instance = parent::create($container)

ธง ru

ฉันใช้วิธีฉีดบริการนี้ไปยังตัวควบคุมเสมอ:

<?php    
เนมสเปซ Drupal\TestModule\Controller;
    
    ใช้ Drupal\Core\Controller\ControllerBase;
    ใช้ Symfony\Component\DependencyInjection\ContainerInterface;
    
    คลาส TestModuleController ขยาย ControllerBase {
    
      ป้องกัน $testModule;
    
        ฟังก์ชั่นสาธารณะ __construct (TestModule $testModule) {
        $this->testModule = $testModule;
      }
    
      สร้างฟังก์ชันคงที่สาธารณะ (ContainerInterface $container) {
        ส่งคืนค่าคงที่ใหม่ (
          $container->get('testModule.service')
        );
      }
    
      ฟังก์ชั่นสาธารณะ testModule () {
        กลับ [
          '#type' => 'มาร์กอัป',
          '#markup' => $this->testModule->getTestModule(),
        ];
      }
    }

แต่ด้วย drupal console ฉันสร้าง Controller พร้อมบริการ (คำสั่ง drupal gcon) และรับรหัสอื่น:

<?php
    เนมสเปซ Drupal\TestModule\Controller;
    
    ใช้ Drupal\Core\Controller\ControllerBase;
    ใช้ Symfony\Component\DependencyInjection\ContainerInterface;
    
    คลาส TestModuleController ขยาย ControllerBase {
    
      ป้องกัน $testModule;
    
      สร้างฟังก์ชันคงที่สาธารณะ (ContainerInterface $container) {
        $instance = parent::create($คอนเทนเนอร์);
        $instance->testModule = $container->get('testModule.service');
        ส่งคืนอินสแตนซ์ $;
      }
    
      ฟังก์ชั่นสาธารณะ testModule () {
        กลับ [
          '#type' => 'มาร์กอัป',
          '#markup' => $this->testModule->getTestModule(),
        ];
      }
    }

วิธีที่สองนี้ดีกว่าวิธีแรก และฉันควรใช้วิธีใด

Score:3
ธง ru

TL; DR: วิธีที่สองดีกว่า

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

สำหรับข้อมูลเพิ่มเติมฉันขอแนะนำให้อ่านสิ่งนี้ เปลี่ยนบันทึกจากโมดูล Webform.

leymannx avatar
ne flag
Ah yeah, the CR is nice. I had this issue bookmarked: https://www.drupal.org/project/webform/issues/3067546
baikho avatar
us flag
นอกจากนี้ยังมีการอ่านที่น่าสนใจเกี่ยวกับเรื่องนี้ [ขยายคลาสปลั๊กอิน Drupal 8 อย่างปลอดภัยโดยไม่ต้องกลัวการเปลี่ยนแปลงตัวสร้าง] -ของตัวสร้าง-การเปลี่ยนแปลง)

โพสต์คำตอบ

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