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

คู่มือสำหรับนักพัฒนา CodeIgniter

แพ็กเกจ CodeIgniter มี service factory ฟังก์ชันตัวช่วย และ wrapper ไลบรารี Pdf ขนาดเล็กสำหรับเอกสาร Portable Document Format (PDF) หนึ่งฉบับ ใช้ wrapper นี้ภายใน controller ส่วนงานคิวจะใช้ static builder callable เนื่องจาก payload ของคิว CodeIgniter ต้องเป็นข้อมูลที่ serialize ได้

ใช้คู่มือนี้เพื่อออกแบบ flow ของ controller บริการ queue builder และการทดสอบที่เกี่ยวข้องกับ nextpdf/codeigniter

เลเยอร์เป็นเจ้าของโดยความรับผิดชอบอย่าใส่ไว้ที่นี่
Controllerแอปพลิเคชันตรวจสอบสิทธิ์ เรียก builder หรือบริการ และคืนค่า DownloadResponseตรรกะเค้าโครงที่ใช้ร่วมกัน
Wrapper ไลบรารีnextpdf/codeigniterห่อหุ้ม Document หนึ่งรายการ และเตรียมตัวช่วยสำหรับ response และการบันทึกที่จัดเก็บเอกสารระยะยาว
Service factorynextpdf/codeigniterสร้าง registry ที่ใช้ร่วมกันและเอกสารใหม่รากที่จัดเก็บเฉพาะตามธุรกิจ
Queue builderแอปพลิเคชันสร้างเอกสารจากอินพุต static callableออบเจ็กต์ของ request หรือสถานะที่ serialize ไม่ได้
เอนจินหลักnextpdf/nextpdfสร้างและ serialize ไฟล์ PDFนโยบาย response หรือคิวของ CodeIgniter
ขั้นตอนพฤติกรรมการดำเนินการของนักพัฒนา
การลงทะเบียน autoloadRegistrar::Autoload() ลงทะเบียนการโหลดตัวช่วยสำหรับโมดูลโหลดโมดูลผ่านการกำหนดค่าของ CodeIgniter
การ resolve บริการServices::pdf() คืนค่า wrapper รอบเอกสารใหม่เป็นค่าเริ่มต้นresolve หนึ่งครั้งต่อ request
การสร้างเนื้อหาโค้ดแอปพลิเคชันใช้ Pdf::document() สำหรับการเรียกใช้เอกสารหลักเก็บโค้ดสำหรับสร้างเอกสารไว้ในบริการหรือ builder
ResponsePdfResponse คืนค่า DownloadResponseให้แพ็กเกจกำหนด header ของ PDF
การประมวลผลคิวGeneratePdfJob::process() ตรวจสอบความถูกต้องของ builder และพาธเอาต์พุต แล้วจึงบันทึกวาง queue builder ไว้ภายใต้ App\PdfBuilders
พาธวัตถุประสงค์
app/PdfBuilders/*static builder ที่ปลอดภัยสำหรับคิวซึ่ง GeneratePdfJob ยอมรับ
app/Libraries/*wrapper เสริมของแอปพลิเคชันรอบ ๆ เวิร์กโฟลว์เอกสารที่ทำซ้ำ
app/Services/*การดึงข้อมูลโดเมนและนโยบายการจัดเก็บ
app/Config/NextPdf.phpการ override ระดับแอปพลิเคชันสำหรับค่ากำหนดแพ็กเกจ
tests/app/PdfBuilders/*การทดสอบ builder และ payload ของคิว

ใช้ตัวช่วยของแพ็กเกจสำหรับ flow สั้น ๆ และเรียกบริการอย่างชัดเจนเมื่อควรวางการสร้างเอกสารไว้ในคลาสที่ทดสอบได้โดยตรง

<?php
namespace App\Controllers;
final class InvoiceController extends BaseController
{
public function download(int $id)
{
$pdf = pdf();
$pdf->document()
->setTitle('Invoice ' . $id)
->addPage()
->writeHtml('<h1>Invoice ' . $id . '</h1>');
return $pdf->download('invoice-' . $id . '.pdf');
}
}

queue builder ควรเป็น static ให้ผลลัพธ์ที่คาดเดาได้ และอยู่ภายใต้ App\PdfBuilders เก็บอาร์เรย์ context ให้เรียบง่ายพอที่จะ serialize และตรวจสอบได้

<?php
namespace App\PdfBuilders;
use NextPDF\Core\Document;
final class InvoiceBuilder
{
public static function build(Document $document, array $context): Document
{
$document->setTitle((string) $context['title'])
->addPage()
->writeHtml((string) $context['html']);
return $document;
}
}

งานนี้จำกัดเอาต์พุตให้อยู่เฉพาะในไดเรกทอรี PDF ของแอปพลิเคชันตามค่าที่กำหนดไว้ หากแอปพลิเคชันของคุณต้องการที่จัดเก็บเฉพาะตาม tenant ให้วางนโยบายนั้นไว้ในบริการเดียว และทดสอบก่อน dispatch งาน

จุดขยายความสามารถใช้สำหรับข้อจำกัด
Services::pdfDocument()ปรับแต่งการสร้างเอกสารต้องคืนค่าเอกสารใหม่
Services::fontRegistry()วอร์มอัปฟอนต์และเข้าถึง registryปฏิเสธพาธที่ไม่ปลอดภัย และล็อก registry ไว้หลังวอร์มอัป
Services::pdfSigner()เปิดใช้การลงลายเซ็นดิจิทัลแบบเสริมคืนค่า null เมื่อปิดการลงลายเซ็น
NextPDF\CodeIgniter\Libraries\Pdfห่อหุ้มงานเอกสารที่ใช้งานผ่าน controllerหนึ่ง wrapper จับคู่กับหนึ่งเอกสาร
App\PdfBuilders::*builder เอกสารที่ปลอดภัยสำหรับคิวต้องเป็นสตริง static callable
app/Config/NextPdf.phpค่าเริ่มต้นของแอปพลิเคชันและการตั้งค่าการผสานรวมระบุค่าสำหรับ production อย่างชัดเจน
  1. เริ่มต้นด้วย controller ที่เรียก pdf() หรือ service('pdf')
  2. ย้ายการสร้างเอกสารที่ทำซ้ำไปไว้ใน app/PdfBuilders หรือบริการของแอปพลิเคชัน
  3. ใช้ GeneratePdfJob เมื่อการสร้างเอกสารช้าเกินไปสำหรับเส้นทาง request
  4. เก็บ context ของคิวให้ serialize ได้และมีขนาดเล็ก
  5. จัดเก็บเอาต์พุตไว้ภายใต้รากที่จัดเก็บ PDF ที่ได้รับอนุมัติ เว้นแต่คุณจะตั้งใจขยายนโยบาย
  6. เพิ่มการทดสอบสำหรับตัวช่วย บริการ payload ของคิว และพาธที่ไม่ปลอดภัยต่าง ๆ
ความล้มเหลวควรจัดการที่ใดการตอบสนองที่แนะนำ
ส่วนขยายขาดหายไปหรือพาธฟอนต์ไม่ปลอดภัยService factoryล้มเหลวอย่างรวดเร็วระหว่างการ resolve บริการ
builder callable ไม่ถูกต้องการตรวจสอบความถูกต้องของงานคิวปฏิเสธงานและบันทึกสตริงของ builder โดยไม่รวมข้อมูลลับ
พาธเอาต์พุตที่ไม่ปลอดภัยบริการจัดเก็บและงานคิวปฏิเสธก่อน dispatch และคงการตรวจสอบความถูกต้องของงานไว้
ข้อผิดพลาดในการ serialize responseการจัดการข้อผิดพลาดของ controller หรือเฟรมเวิร์กอย่าส่งเนื้อหา response body ที่ไม่สมบูรณ์
คลาส Premium แบบเสริมไม่พร้อมใช้งานค่าที่เมธอดของบริการคืนกลับมาจัดการ null อย่างชัดเจนก่อนใช้ฟีเจอร์ e-invoice แบบเสริม
ประเด็นค่าเริ่มต้นเมื่อใดควร override
เนมสเปซของ queue builderApp\PdfBuildersคงค่าเริ่มต้นไว้ เว้นแต่คุณจะอัปเดตนโยบายความปลอดภัยด้วย
รากของเอาต์พุตWRITEPATH/pdfsoverride เฉพาะเมื่อมี allowlist ที่เข้มงวดกว่าเท่านั้น
ชื่อไฟล์ของ responsedocument.pdfใช้ชื่อไฟล์เชิงธุรกิจที่ผ่านการ sanitize แล้ว
เมธอดสตรีมความเท่าเทียมกันของ Application programming interface (API) กับเฟรมเวิร์กอื่น ๆอย่าพึ่งพาการสตรีมเป็นขอบเขตของหน่วยความจำใน CodeIgniter
บริการเอกสารเป็นเอกสารใหม่ตามค่าเริ่มต้นอย่าร้องขอเอกสารที่ใช้ร่วมกันจากโค้ดในเส้นทาง request
  • การทดสอบบริการตรวจสอบว่าการ resolve Services::pdf() แต่ละครั้งคืนค่าเอกสารที่เป็นอิสระต่อกัน
  • การทดสอบตัวช่วยตรวจสอบว่า pdf() และ pdf_document() คืนค่าออบเจ็กต์ใหม่
  • การทดสอบ response ตรวจสอบ header และการ normalize ชื่อไฟล์ให้เป็นมาตรฐาน
  • การทดสอบคิวครอบคลุมสตริง builder ที่ไม่ถูกต้องและพาธเอาต์พุตที่ไม่ปลอดภัย
  • การทดสอบ builder ใช้ข้อมูล context ที่เป็นตัวแทน
  • การทดสอบ config ครอบคลุมพาธฟอนต์ พาธแคช สถานะปิดการลงลายเซ็น และสถานะปิดการใช้งาน Time-Stamp Authority (TSA)