تخطَّ إلى المحتوى

دليل المطوّر إلى CodeIgniter

توفّر حزمة ⁨CodeIgniter⁩ مصانع خدمات ودوالًا مساعدة وغلافًا خفيفًا لمكتبة Pdf لمستند واحد بصيغة ⁨Portable Document Format⁩ (⁨PDF⁩). استخدم الغلاف داخل المتحكّمات. يعتمد عمل الطابور على كائنات بناء ساكنة وقابلة للاستدعاء، لأنّ حمولات طابور ⁨CodeIgniter⁩ يجب أن تكون بيانات قابلة للتسلسل.

استخدم هذا الدليل لتصميم تدفّقات المتحكّمات والخدمات وكائنات بناء الطابور والاختبارات الخاصة بـ nextpdf/codeigniter.

الطبقةمملوكة لـالمسؤوليةما لا يُوضَع هنا
المتحكّمالتطبيقتحقّق من الصحة، واستدعِ كائن بناء أو خدمة، وأرجِع DownloadResponse.منطق التخطيط المشترك.
غلاف المكتبةnextpdf/codeigniterغلِّف Document واحدًا ووفّر دوالًا مساعدة للاستجابة والحفظ.تخزين المستندات طويل الأمد.
مصنع الخدمةnextpdf/codeigniterأنشئ سجلّات مشتركة ومستندات جديدة.جذور التخزين الخاصة بمجال العمل.
كائن بناء الطابورالتطبيقابنِ مستندًا من مُدخَل قابل للاستدعاء وساكن.كائنات الطلب أو الحالة التي لا يمكن تسلسلها.
المحرّك الأساسيnextpdf/nextpdfابنِ ملف ⁨PDF⁩ وسلسِلْه.استجابة ⁨CodeIgniter⁩ أو سياسة الطابور.
المرحلةالسلوكإجراء المطوّر
تسجيل التحميل التلقائيتسجّل Registrar::Autoload() تحميل الدوال المساعدة للوحدة.حمّل الوحدة عبر إعدادات ⁨CodeIgniter.⁩
حلّ الخدمةتُرجِع Services::pdf() افتراضيًا غلافًا حول مستند جديد.احلُل الخدمة مرّة واحدة لكلّ طلب.
التأليفيستخدم كود التطبيق Pdf::document() لاستدعاءات المستند الأساسية.أبقِ كود بناء المستندات داخل الخدمات أو كائنات البناء.
الاستجابةتُرجِع PdfResponse كائن DownloadResponse.دع الحزمة تضبط ترويسات ⁨PDF.⁩
تنفيذ الطابورتتحقّق GeneratePdfJob::process() من كائن البناء ومسار الإخراج، ثم تحفظه.ضع كائنات بناء الطابور ضمن App\PdfBuilders.
المسارالغرض
app/PdfBuilders/*كائنات بناء ساكنة وآمنة للطابور تقبلها GeneratePdfJob.
app/Libraries/*أغلفة تطبيق اختيارية لتدفّقات عمل المستندات المتكرّرة.
app/Services/*سياسة استرجاع بيانات المجال وتخزينها.
app/Config/NextPdf.phpتجاوزات التطبيق لإعدادات الحزمة.
tests/app/PdfBuilders/*اختبارات كائن البناء وحمولات الطابور.

استخدم دوال الحزمة المساعدة للتدفّقات القصيرة. واستخدم استدعاءات الخدمة الصريحة عندما ينتمي بناء المستند إلى صنف يمكنك اختباره مباشرةً.

<?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');
}
}

يجب أن تكون كائنات بناء الطابور ساكنة وحتمية وموجودة ضمن App\PdfBuilders. أبقِ مصفوفة السياق بسيطة بما يكفي لتسلسلها ومراجعتها.

<?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⁩ المُعَدّ للتطبيق. إذا احتاج تطبيقك إلى تخزين خاص بكلّ مستأجر، فضع تلك السياسة في خدمة واحدة، واختبرها قبل إرسال المهمة.

نقطة التوسيعاستخدمها من أجلالقيد
Services::pdfDocument()خصّص إنشاء المستند.يجب أن تُرجِع مستندًا جديدًا.
Services::fontRegistry()سخّن الخطوط وادخل إلى السجلّ.ارفض المسارات غير الآمنة، وأبقِ السجلّ مقفلًا بعد التسخين.
Services::pdfSigner()فعّل التوقيع الرقمي الاختياري.أرجِع null عند تعطيل التوقيع.
NextPDF\CodeIgniter\Libraries\Pdfغلِّف عمل المستندات الموجَّه إلى المتحكّمات.يقابل كلّ غلاف مستندًا واحدًا.
App\PdfBuilders::*كائنات بناء مستندات آمنة للطابور.يلزم سلسلة استدعاء ساكنة.
app/Config/NextPdf.phpالقيم الافتراضية للتطبيق وإعدادات التكامل.أبقِ قيم الإنتاج صريحة.
  1. ابدأ بمتحكّم يستدعي pdf() أو service('pdf').
  2. انقل بناء المستندات المتكرّر إلى app/PdfBuilders أو خدمة تطبيق.
  3. استخدم GeneratePdfJob عندما يكون التوليد أبطأ من أن يناسب مسار الطلب.
  4. أبقِ سياق الطابور قابلًا للتسلسل وصغيرًا.
  5. خزّن الإخراج ضمن جذر تخزين ⁨PDF⁩ المعتمد، إلّا إذا وسّعت السياسة عمدًا.
  6. أضف اختبارات للدوال المساعدة والخدمات وحمولات الطابور والمسارات غير الآمنة.
الإخفاقالمكان الذي ينبغي معالجته فيهالاستجابة المُوصى بها
امتداد مفقود أو مسار خط غير آمنمصنع الخدمة.أخفِق سريعًا أثناء حلّ الخدمة.
كائن بناء قابل للاستدعاء غير صالحالتحقّق من مهمة الطابور.ارفض المهمة وسجّل سلسلة كائن البناء دون أسرار.
مسار إخراج غير آمنخدمة التخزين ومهمة الطابور.ارفض قبل الإرسال، وأبقِ التحقّق من المهمة.
خطأ تسلسل الاستجابةمعالجة الأخطاء في المتحكّم أو إطار العمل.لا ترسل جسم استجابة جزئيًا.
صنف ⁨Premium⁩ اختياري غير متاحالقيمة المُرجَعة من دالة الخدمة.عالِج null صراحةً قبل استخدام ميزات الفوترة الإلكترونية الاختيارية.
الجانب المعنيّالافتراضيمتى تتجاوز
فضاء أسماء كائن بناء الطابورApp\PdfBuilders.أبقِ القيمة الافتراضية، إلّا إذا حدّثت سياسة الأمان أيضًا.
جذر الإخراجWRITEPATH/pdfs.لا تتجاوز إلّا بقائمة سماح أقوى.
اسم ملف الاستجابةdocument.pdf.استخدم أسماء ملفات عمل مُنقّاة.
دوال الدفقتكافؤ واجهة برمجة التطبيقات (⁨API⁩) مع أطر العمل الأخرى.لا تعتمد على التدفّق بوصفه حدًّا للذاكرة في ⁨CodeIgniter.⁩
خدمة المستندجديد افتراضيًا.لا تطلب مستندات مشتركة من كود الطلب.
  • تتحقّق اختبارات الخدمة من أنّ كلّ عملية حلّ لـ Services::pdf() تُرجِع مستندًا مستقلًّا.
  • تتحقّق اختبارات الدوال المساعدة من أنّ pdf() وpdf_document() تُرجِعان كائنات جديدة.
  • تتحقّق اختبارات الاستجابة من الترويسات وتطبيع اسم الملف.
  • تغطّي اختبارات الطابور سلاسل كائن البناء غير الصالحة ومسارات الإخراج غير الآمنة.
  • تستخدم اختبارات كائن البناء بيانات سياق تمثيلية.
  • تغطّي اختبارات الإعداد مسار الخط ومسار التخزين المؤقّت وحالة تعطيل التوقيع وحالة تعطيل سلطة الطابع الزمني (⁨TSA⁩).