การบูตและการค้นพบแพ็กเกจ NextPDF สำหรับ CodeIgniter
ภาพรวมโดยย่อ
หัวข้อที่มีชื่อว่า “ภาพรวมโดยย่อ”CodeIgniter 4 ค้นพบคลาส Services ฟังก์ชันเฮลเปอร์ และ registrar ของแพ็กเกจผ่านกลไกการค้นพบแพ็กเกจของ Composer หน้านี้อธิบายลำดับขั้นตอนและการกำหนดค่าที่ควบคุมการทำงานดังกล่าว
การค้นพบเซอร์วิสของ CodeIgniter ทำงานอย่างไร
หัวข้อที่มีชื่อว่า “การค้นพบเซอร์วิสของ CodeIgniter ทำงานอย่างไร”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)
ลำดับการบูต
หัวข้อที่มีชื่อว่า “ลำดับการบูต”- Composer autoload Composer ลงทะเบียนแมป PSR-4 และรายการ autoload แบบ
filesจะโหลดไฟล์เฮลเปอร์src/CodeIgniter/Helpers/pdf_helper.phpในขั้นตอนนี้ - Framework bootstrap CodeIgniter อ่าน
Config\Modulesเมื่อเปิดใช้งานการค้นพบ จะสร้างรายการองค์ประกอบที่ค้นพบครอบคลุมแพ็กเกจของ Composer ทั้งหมด - Registrar discovery เฟรมเวิร์กรวบรวมคลาส
RegistrarและRegistrar::Autoload()ของแพ็กเกจจะประกาศเฮลเปอร์pdfให้กับตัวโหลดเฮลเปอร์ของ CodeIgniter - 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() และฟังก์ชันนัลเทสต์ของแพ็กเกจอาศัยการรีเซ็ตนี้ระหว่างเคสทดสอบ
ลำดับการรีโซลฟ์การกำหนดค่า
หัวข้อที่มีชื่อว่า “ลำดับการรีโซลฟ์การกำหนดค่า”การกำหนดค่าที่มีผลจริงถูกรีโซลฟ์ตามลำดับนี้:
- ค่าเริ่มต้นของแพ็กเกจที่กำหนดไว้ใน
NextPDF\CodeIgniter\Config\NextPdf - คลาสของแอปพลิเคชัน
Config\NextPdfที่สืบทอดจากคลาสของแพ็กเกจ หากมีคลาสนี้ CodeIgniter จะโหลดคลาสนี้แทนค่าเริ่มต้นของแพ็กเกจ - การแทนที่ด้วยตัวแปรสภาพแวดล้อมที่
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/ — รูปแบบความล้มเหลวในการค้นพบ