ภาพรวมการผสาน NextPDF กับ Symfony
โดยสรุป
หัวข้อที่มีชื่อว่า “โดยสรุป”nextpdf/symfony คือ bundle อย่างเป็นทางการของเอนจิน NextPDF สำหรับ Symfony 7 bundle นี้เชื่อมเอนจินเข้ากับคอนเทนเนอร์ของ Symfony และมอบ document factory ที่สามารถฉีด (inject) เข้าไปในเซอร์วิสของคุณได้ นอกจากนี้ยังมีตัวช่วยสร้างการตอบสนอง Hypertext Transfer Protocol (HTTP) และเส้นทางสำหรับสร้างไฟล์ Portable Document Format (PDF) แบบอะซิงโครนัส เพื่อให้งานทำงานอยู่เบื้องหลังได้
สิ่งที่ bundle มอบให้
หัวข้อที่มีชื่อว่า “สิ่งที่ bundle มอบให้”NextPDF Symfony เชื่อมเอนจิน nextpdf/core เข้ากับแอปพลิเคชัน Symfony ในรูปแบบ bundle มาตรฐาน bundle นี้เพิ่มองค์ประกอบพื้นฐานต่อไปนี้ โดยแต่ละรายการได้รับการตรวจสอบกับซอร์สของ bundle ใน src/Symfony/:
- จุดเริ่มต้นของ bundle —
NextPDF\Symfony\NextPdfBundleขยายคลาสฐานBundleของ Symfony และลงทะเบียน compiler pass หนึ่งตัว - ส่วนขยาย dependency-injection —
NextPDF\Symfony\DependencyInjection\NextPdfExtensionโหลดนิยามเซอร์วิส แปลงโครงสร้างการกำหนดค่าให้เป็นพารามิเตอร์ของคอนเทนเนอร์ และเปิดเผยนามแฝงการกำหนดค่าnextpdf - โครงสร้างการกำหนดค่าแบบมีไทป์ —
NextPDF\Symfony\DependencyInjection\Configurationกำหนดสคีมาการกำหนดค่าnextpdfโครงสร้างนี้ตรวจสอบความถูกต้องของค่า enum กำหนดค่าเริ่มต้น และใช้ตัวยึดตำแหน่งพารามิเตอร์%kernel.*% - document factory ที่ฉีดได้ —
NextPDF\Symfony\Service\PdfFactoryสร้างอินสแตนซ์ใหม่ของNextPDF\Core\Documentที่กำหนดค่าไว้ล่วงหน้า สิ่งนี้เทียบเท่ากับ static facade ในรูปแบบของ Symfony - ตัวช่วยสร้างการตอบสนอง HTTP —
NextPDF\Symfony\Http\PdfResponseสร้างการตอบสนองแบบ inline แบบดาวน์โหลด และแบบสตรีม พร้อมชุดส่วนหัวความปลอดภัยที่ตายตัวซึ่งสอดคล้องกับ Open Worldwide Application Security Project (OWASP) - เส้นทางการสร้างแบบอะซิงโครนัส —
NextPDF\Symfony\Message\GeneratePdfMessage,NextPDF\Symfony\Message\GeneratePdfHandlerและNextPDF\Symfony\Message\PdfBuilderInterfaceผสานการทำงานกับ Symfony Messenger เพื่อให้การเรนเดอร์ PDF สามารถทำงานบน worker ได้ - ตัวตรวจหาส่วนขยายในเวลาคอมไพล์ —
NextPDF\Symfony\DependencyInjection\Compiler\OptionalExtensionPassตรวจหาส่วนขยายที่เป็นทางเลือกของ NextPDF และลงทะเบียนเซอร์วิสของส่วนขยายเหล่านั้นเฉพาะเมื่อมีส่วนขยายดังกล่าวอยู่เท่านั้น
สัญญาของคอนเทนเนอร์
หัวข้อที่มีชื่อว่า “สัญญาของคอนเทนเนอร์”bundle นี้ลงทะเบียนเซอร์วิสคอนเทนเนอร์สาธารณะชุดเล็กที่เสถียร เซอร์วิสเอกสาร nextpdf.document (มีนามแฝงเป็น NextPDF\Contracts\PdfDocumentInterface และ NextPDF\Core\Document) เป็นแบบ ไม่ใช้ร่วมกัน: การ resolve แต่ละครั้งจะคืนเอกสารคนละอินสแตนซ์ที่นำไปใช้แล้วทิ้งได้ สิ่งนี้สอดคล้องกับสัญญาของคอนเทนเนอร์ตาม PHP Standard Recommendation 11 (PSR-11): การเรียก get() สองครั้งติดต่อกันด้วยตัวระบุเดียวกันอาจคืนค่าที่ต่างกันได้ ขึ้นอยู่กับการกำหนดค่าของคอนเทนเนอร์ — ดู PSR-11 §1.1.2 การ binding แบบไม่ใช้ร่วมกันนี้กำหนดไว้โดยตั้งใจ เอกสารจะสะสมสถานะของแต่ละการเรนเดอร์ ดังนั้นการมีอินสแตนซ์ใหม่ต่อหนึ่งคำขอจึงป้องกันไม่ให้สถานะรั่วไหลข้ามคำขอใน worker ที่ทำงานต่อเนื่องเป็นเวลานาน
ในทางกลับกัน font registry (NextPDF\Contracts\FontRegistryInterface) เป็น singleton ที่ใช้ร่วมกัน ส่วน image registry มีแท็ก kernel.reset ดังนั้นแคชที่มีขอบเขตจำกัดของ registry นี้จึงถูกล้างระหว่างคำขอภายใต้ FrankenPHP และ Messenger worker หน้าการกำหนดค่าระบุรายละเอียดตารางเซอร์วิสและนามแฝงทั้งหมด
การบันทึกล็อกที่เป็นทางเลือก
หัวข้อที่มีชื่อว่า “การบันทึกล็อกที่เป็นทางเลือก”font registry และ image registry สามารถรับ logger ตาม PHP Standard Recommendation 3 (PSR-3) แบบทางเลือกได้ bundle จะ binding Psr\Log\LoggerInterface เฉพาะเมื่อแอปพลิเคชันจัดเตรียม logger ไว้เท่านั้น (nullOnInvalid()) ดังนั้นการบันทึกล็อกจึงเป็น collaborator แบบทางเลือก ไม่ใช่ dependency ที่บังคับ สิ่งนี้สอดคล้องกับสัญญาของ logger ตาม PSR-3 ซึ่งกำหนดให้ logger เป็น collaborator ที่ถูกฉีดเข้ามาและสามารถสับเปลี่ยนได้ (PSR-3)
ความสามารถแบบ core เทียบกับแบบทางเลือก
หัวข้อที่มีชื่อว่า “ความสามารถแบบ core เทียบกับแบบทางเลือก”ตัว bundle เองเป็นซอฟต์แวร์ core ภายใต้ Apache-2.0 ความสามารถบางอย่างจะปรากฏก็ต่อเมื่อคุณติดตั้งแพ็กเกจที่เป็นทางเลือกควบคู่ไปกับ bundle เท่านั้น:
| ความสามารถ | ต้องการ | การตรวจหา |
|---|---|---|
การสร้าง PDF, PdfFactory, PdfResponse | core เท่านั้น | พร้อมใช้งานเสมอ |
| การสร้างแบบอะซิงโครนัส | symfony/messenger | handler จะเปิดใช้งานเมื่อมีการติดตั้ง Messenger |
| การเรนเดอร์ HTML ด้วย Chrome DevTools Protocol (CDP) | nextpdf/artisan | การตรวจสอบ class_exists ในเวลาคอมไพล์ |
| การจัดเก็บถาวรแบบ PDF/A, ลายเซ็นดิจิทัล | nextpdf/premium (ติดตั้ง Pro) | การตรวจสอบ class_exists ในเวลาคอมไพล์ |
หลังจากติดตั้ง nextpdf/premium แล้ว bundle จะสามารถใช้การกำหนดค่าลายเซ็นพื้นฐาน PDF Advanced Electronic Signatures (PAdES) B-B ได้ โปรไฟล์ลายเซ็นระดับสูงกว่านี้อยู่นอกขอบเขตของเอกสารประกอบของ bundle นี้ สำหรับตารางเปรียบเทียบรุ่น โปรดดูเอกสารประกอบของ NextPDF Premium
เมื่อใดควรใช้ bundle นี้
หัวข้อที่มีชื่อว่า “เมื่อใดควรใช้ bundle นี้”ใช้ nextpdf/symfony เมื่อคุณสร้าง PDF ภายในแอปพลิเคชัน HTTP หรือ worker ของ Symfony 7 bundle นี้มอบเซอร์วิสที่จัดการโดยคอนเทนเนอร์ registry ที่ปลอดภัยสำหรับ worker และการตอบสนองดาวน์โหลดที่ปลอดภัย คุณจึงไม่ต้องเชื่อมต่อเอนจินด้วยตนเอง หากคุณต้องการเพียงการสร้างแบบครั้งเดียวในสคริปต์ แพ็กเกจ core nextpdf/core เพียงอย่างเดียวก็เพียงพอแล้ว
ความสอดคล้องตามมาตรฐาน
หัวข้อที่มีชื่อว่า “ความสอดคล้องตามมาตรฐาน”แต่ละแถวเป็นข้อกล่าวอ้างเชิงบรรทัดฐานที่ระบุไว้บนหน้านี้ และถูกผูกกับ reference_id แบบเลขฐานสิบหก 64 หลักเต็มจาก corpus ขององค์กรพัฒนามาตรฐาน (SDO) ที่มีการควบคุมการเข้าถึง ข้อมูลที่มา (manifest ของ corpus, transport สำหรับการดึงข้อมูล) อยู่ใน _sidecars/rag-citations.yaml
| ข้อกำหนด | ข้อ | ตัวระบุอ้างอิง (reference_id) | ข้อกล่าวอ้าง |
|---|---|---|---|
| PSR-11 | psr_11_container#1.1.2.p3.b | สัญญาค่าที่คืนกลับของ get() ในคอนเทนเนอร์ | |
| PSR-3 | psr_3_logger#x3.p17 | LoggerInterface เป็น dependency ที่เป็นทางเลือก |
บริบทเชิงพาณิชย์
หัวข้อที่มีชื่อว่า “บริบทเชิงพาณิชย์”ลายเซ็นดิจิทัลและการจัดเก็บถาวรแบบ PDF/A จะพร้อมใช้งานเมื่อมีการติดตั้ง nextpdf/premium (Pro) ควบคู่ไปกับ bundle ความสามารถ Pro ที่เป็นทางเลือกนี้ไม่ต้องมีการเปลี่ยนแปลงโค้ดใน Core bundle ที่ระบุไว้ในที่นี้ ดู </get-license/?intent=symfony-pro>
ดูเพิ่มเติม
หัวข้อที่มีชื่อว่า “ดูเพิ่มเติม”- /integrations/symfony/install/ — ติดตั้งและลงทะเบียน bundle
- /integrations/symfony/configuration/ — โครงสร้างการกำหนดค่า
nextpdfและตารางเซอร์วิสทั้งหมด - /integrations/symfony/quickstart/ — controller ที่รันได้และตัวอย่างแบบอะซิงโครนัส
- /integrations/symfony/boot-and-discovery/ — วิธีที่ Symfony ค้นพบและบูต bundle
- /integrations/symfony/production-usage/ — ความปลอดภัยของ worker การสตรีม และรูปแบบการทำงานแบบอะซิงโครนัส