ข้ามไปยังเนื้อหา

การบูตและการค้นพบแพ็กเกจ NextPDF สำหรับ CodeIgniter

CodeIgniter 4 ค้นพบคลาส Services ฟังก์ชันเฮลเปอร์ และ registrar ของแพ็กเกจผ่านกลไกการค้นพบแพ็กเกจของ Composer หน้านี้อธิบายลำดับขั้นตอนและการกำหนดค่าที่ควบคุมการทำงานดังกล่าว

CodeIgniter 4 รีโซลฟ์เซอร์วิสโดยสแกนคลาส Config\Services แต่ละคลาสที่ค้นพบ เพื่อหาเมท็อดแบบสแตติกที่ตรงกับชื่อเซอร์วิสที่ร้องขอ เมื่อแอปพลิเคชันของคุณเรียก service('pdf') เฟรมเวิร์กจะหาคลาส Services แรกในรายการที่ค้นพบซึ่งประกาศเมท็อด pdf แล้วจึงเรียกเมท็อดนั้น

การค้นพบถูกควบคุมโดย Config\Modules:

  • $enabled — สวิตช์หลักสำหรับการค้นพบอัตโนมัติ ค่าเริ่มต้นคือ true
  • $discoverInComposer — ขยายการค้นพบไปยังแพ็กเกจของ Composer ค่าเริ่มต้นคือ true แฟล็กนี้ทำให้เฟรมเวิร์กค้นพบ nextpdf/codeigniter ได้
  • $composerPackages — ตัวกรอง only / exclude ที่เลือกใช้ได้สำหรับชุดแพ็กเกจของ Composer
  • $aliases — ประเภทขององค์ประกอบที่เข้าร่วมในการค้นพบ ค่าเริ่มต้นของเฟรมเวิร์กรวม services และ registrars และแพ็กเกจนี้ใช้ทั้งสองรายการ

คลาสของแพ็กเกจคือ NextPDF\CodeIgniter\Config\Services Composer แมปคำนำหน้า PHP Standards Recommendation 4 (PSR-4) NextPDF\CodeIgniter\ ไปยัง src/CodeIgniter/ ชื่อคลาสแบบ fully qualified ต้องมี top-level namespace (PSR-4 §x1.x2.p5, ระดับ MUST) คำนำหน้า namespace จะถูกแมปไปยังไดเรกทอรีฐาน ดังนั้นคลาสจึงรีโซลฟ์ไปยังไฟล์ของตัวเอง (PSR-4 §x1.x3)

  1. Composer autoload Composer ลงทะเบียนแมป PSR-4 และรายการ autoload แบบ files จะโหลดไฟล์เฮลเปอร์ src/CodeIgniter/Helpers/pdf_helper.php ในขั้นตอนนี้
  2. Framework bootstrap CodeIgniter อ่าน Config\Modules เมื่อเปิดใช้งานการค้นพบ จะสร้างรายการองค์ประกอบที่ค้นพบครอบคลุมแพ็กเกจของ Composer ทั้งหมด
  3. Registrar discovery เฟรมเวิร์กรวบรวมคลาส Registrar และ Registrar::Autoload() ของแพ็กเกจจะประกาศเฮลเปอร์ pdf ให้กับตัวโหลดเฮลเปอร์ของ CodeIgniter
  4. Service resolution on first call แฟกทอรีเซอร์วิสทำงานแบบ lazy การเรียก service('pdf') หรือ Services::pdf() ครั้งแรกจะรันแฟกทอรี เซอร์วิสที่แชร์จะถูกแคชไว้ใน locator ตลอดทั้งโพรเซส

CodeIgniter 4 ไม่ได้จัดเตรียมคอนเทนเนอร์ PSR-11 แต่เมท็อดแฟกทอรีแบบสแตติกบนคลาส Services ทำหน้าที่เป็นการไบนด์แทน เมท็อดแต่ละตัวรับพารามิเตอร์ bool $getShared:

เซอร์วิสแชร์โดยค่าเริ่มต้นหมายเหตุ
fontRegistryใช่วอร์มก่อน แล้วล็อก
imageRegistryใช่แคชแบบ least recently used (LRU) ที่มีขอบเขตจำกัด
documentFactoryใช่ไม่มีสถานะ
pdfDocumentไม่สร้างใหม่ทุกครั้งที่เรียก
pdfไม่สร้างใหม่ทุกครั้งที่เรียก
tsaClientใช่null เมื่อไม่ได้กำหนดค่า URL ของ Time-Stamp Authority (TSA)
pdfSignerไม่null เมื่อปิดใช้งานการลงนาม

อินสแตนซ์ที่แชร์จะอยู่ในแคชอินสแตนซ์ของ BaseService ของ CodeIgniter ตลอดทั้งโพรเซส ฮาร์เนสทดสอบของเฟรมเวิร์กล้างแคชนี้ด้วย BaseService::reset() และฟังก์ชันนัลเทสต์ของแพ็กเกจอาศัยการรีเซ็ตนี้ระหว่างเคสทดสอบ

การกำหนดค่าที่มีผลจริงถูกรีโซลฟ์ตามลำดับนี้:

  1. ค่าเริ่มต้นของแพ็กเกจที่กำหนดไว้ใน NextPDF\CodeIgniter\Config\NextPdf
  2. คลาสของแอปพลิเคชัน Config\NextPdf ที่สืบทอดจากคลาสของแพ็กเกจ หากมีคลาสนี้ CodeIgniter จะโหลดคลาสนี้แทนค่าเริ่มต้นของแพ็กเกจ
  3. การแทนที่ด้วยตัวแปรสภาพแวดล้อมที่ BaseConfig ใช้ โดยคีย์คือชื่อคลาสแบบสั้นที่เป็นตัวพิมพ์เล็ก nextpdf (คีย์ซ้อนแบบจุด หรือรูปแบบชื่อคลาสแบบ fully qualified)

ไฟล์ส่วนขยายการกำหนดค่าของแอปพลิเคชันประกาศเพียงคลาสเดียวและไม่มีผลข้างเคียง จึงสอดคล้องกับข้อกำหนดของ PSR-1 ที่ให้ไฟล์หนึ่งไฟล์ทำอย่างใดอย่างหนึ่งระหว่างประกาศสัญลักษณ์หรือรันตรรกะที่มีผลข้างเคียง แต่ไม่ทำทั้งสองอย่าง (PSR-1 §x1.x1.p3) ไฟล์เฮลเปอร์เป็นกรณีตรงข้ามที่ตั้งใจให้มีผลข้างเคียง โดยประกาศฟังก์ชันส่วนกลาง pdf() และ pdf_document() และป้องกันแต่ละฟังก์ชันด้วยการตรวจสอบ function_exists เพื่อให้โหลดซ้ำได้อย่างปลอดภัย

  • composer dump-autoload — สร้างแมป PSR-4 และรายการ autoload แบบ files ขึ้นใหม่หลังการอัปเกรด
  • สำหรับการตรวจสอบการค้นพบอย่างรวดเร็ว ให้ใช้คอนโทรลเลอร์ที่เรียก Services::pdfDocument(false) และตรวจสอบว่าค่าที่คืนกลับมาเป็น Document
  • ตรวจสอบ vendor/composer/autoload_files.php เพื่อยืนยันว่าไฟล์เฮลเปอร์ถูกลงทะเบียนแล้ว
  • ดู /integrations/codeigniter/troubleshooting/ สำหรับการแมปความล้มเหลวกับสาเหตุ
  • ชื่อคลาสแบบ fully qualified ต้องมี top-level namespace (PSR-4 Autoloader §x1.x2.p5)
  • การแมปคำนำหน้า namespace กับ class path ภายใต้ไดเรกทอรีฐาน (PSR-4 Autoloader §x1.x3)
  • ไฟล์หนึ่งไฟล์ประกาศสัญลักษณ์หรือก่อให้เกิดผลข้างเคียง — การออกแบบไฟล์เฮลเปอร์ (PSR-1 Basic Coding Standard §x1.x1.p3)
  • /integrations/codeigniter/integration/ — เอกสารอ้างอิงการ wiring และ smoke test
  • /integrations/codeigniter/install/ — การติดตั้งและตรวจสอบการค้นพบ
  • /integrations/codeigniter/overview/ — ขอบเขตทั้งหมดของ application programming interface (API)
  • /integrations/codeigniter/troubleshooting/ — รูปแบบความล้มเหลวในการค้นพบ