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

تثبيت جسر Cloudflare لـ NextPDF

ثبّت الحزمة باستخدام ⁨Composer⁩. ثم أضِف عميل ⁨HTTP⁩ يطبّق توصية ⁨PHP⁩ المعيارية 18 (⁨PSR-18⁩)، ومصانع تطبّق ⁨PSR-17⁩. يصرّح الجسر بالواجهات، لكنه لا يتضمّن عميل ⁨HTTP⁩ فعليًا.

يقرأ الجسر التبعيات الآتية من قسم require في composer.json:

التبعيةالقيد
⁨PHP⁩>=8.4 <9.0
nextpdf/core^3.0
psr/http-client (⁨PSR-18⁩)^1.0
psr/http-factory (⁨PSR-17⁩)^1.1
psr/log (⁨PSR-3⁩)^3.0

تُحمِّل الحزمة NextPDF\Cloudflare\ تلقائيًا من src/Cloudflare/ (⁨PSR-4⁩). كما تجتاز التحليل الساكن عند المستوى 10 من ⁨PHPStan⁩، ولا تُرفَق بأي خط أساس للمُحلِّل.

Terminal window
composer require nextpdf/cloudflare

يتطلّب مُنشئ الجسر ClientInterface متوافقًا مع ⁨PSR-18⁩، وRequestFactoryInterface متوافقًا مع ⁨PSR-17⁩، وStreamFactoryInterface متوافقًا مع ⁨PSR-17⁩. كما يستخدم مسار النقل المثبّت ResponseFactoryInterface متوافقًا مع ⁨PSR-17⁩ عندما توفّره. يمكنك استخدام أي تنفيذ متوافق. يورد ملف ⁨README⁩ مكتبة ⁨Guzzle⁩ مثالًا على ذلك:

Terminal window
composer require guzzlehttp/guzzle

توفّر ⁨Guzzle⁩ 7 عميل ⁨PSR-18⁩ وجميع واجهات مصانع ⁨PSR-17⁩ الأربع. كما تعمل ⁨Symfony HttpClient⁩ و⁨Buzz⁩ والحزم المتوافقة الأخرى. صُمّمت الحزمة لتكون محايدة تجاه المورّد. يؤكّد اختبار tests/Unit/Architecture/PsrConformanceTest.php أن الحزمة تعتمد على عقود ⁨PSR⁩ فقط، لا على أي عميل فعلي.

اختياري: الاحتياط المحلي عبر ⁨Chrome⁩

قسم بعنوان «اختياري: الاحتياط المحلي عبر ⁨Chrome⁩»

عندما يتعذّر الوصول إلى ⁨Worker⁩ ويكون الاحتياط مُفعَّلًا، يمكن للجسر تفويض التصيير إلى مُصيِّر محلي. وفّر ذلك المُصيِّر عبر NextPDF\Cloudflare\Contract\LocalRendererFactoryInterface. تذكر كتلة suggest في composer.json التنفيذ الرسمي من الطرف الأول:

Terminal window
composer require nextpdf/artisan

تثبيت nextpdf/artisan وحده لا يكفي. يجب أيضًا تمرير LocalRendererFactoryInterface إلى مُنشئ المُصيِّر. إذا كان ⁨Artisan⁩ مثبّتًا ولكن لم يُوصَّل أي مصنع، يكتشف الجسر هذه الحالة ويطرح CloudflareNotAvailableException. وتذكر رسالة الاستثناء ذلك صراحةً. راجع /⁨integrations/cloudflare/production-usage/⁩ للاطّلاع على طريقة التوصيل.

<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Cloudflare\CloudflareRendererConfig;
$config = new CloudflareRendererConfig(
workerUrl: 'https://pdf-renderer.example.workers.dev/render',
apiToken: 'placeholder',
);
echo $config->isValid() ? "ready\n" : "incomplete\n";

تُعيد isValid() القيمة true عندما يكون كلٌّ من workerUrl وapiToken غير فارغ. وهي لا تتّصل بالشبكة؛ بل تتحقّق فقط من اكتمال التهيئة، لذا يمكنك استخدامها كاختبار تمهيدي عند النشر.

  • /⁨integrations/cloudflare/configuration/⁩ — جميع خيارات التهيئة.
  • /⁨integrations/cloudflare/quickstart/⁩ — شغّل أول عملية تصيير لديك.
  • /⁨integrations/cloudflare/boot-and-discovery/⁩ — وصِّل الجسر داخل حاوية إطار العمل.