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

الإعداد الشامل لـ Symfony

ثبّت nextpdf/symfony، واسمح لـ ⁨Flex⁩ بتسجيل الحزمة أو سجّلها يدويًا، وأضف config/packages/nextpdf.yaml، واحقن PdfFactory. استخدم هذه الصفحة بوصفها فهرسًا للربط؛ فكل خطوة تشير إلى دليل أكثر تفصيلًا.

Terminal window
composer require nextpdf/symfony

تتطلب الحزمة nextpdf/core^3.0 || ^5.2، وsymfony/*^7.2، و psr/log^3.0. تُحمَّل الأصناف تلقائيًا تحت بادئة ⁨PHP Standards Recommendation⁩ (⁨PSR⁩)-4، وهي NextPDF\Symfony\ المعيَّنة إلى src/Symfony/. يربط محمّل التحميل التلقائي وفق ⁨PSR-4⁩ بادئة مساحة الأسماء هذه بالدليل الأساسي (⁨PSR-4⁩ §2). للاطلاع على المتطلبات الكاملة والحزم الاختيارية، راجع /⁨integrations/symfony/install/.⁩

الإقلاع والاكتشاف التلقائي

قسم بعنوان «الإقلاع والاكتشاف التلقائي»

مع ⁨Symfony Flex⁩، يسجّل المُدخَل extra.symfony.bundles في ملف composer.json الخاص بالحزمة NextPDF\Symfony\NextPdfBundle في جميع البيئات. من دون ⁨Flex⁩، أضفها يدويًا إلى config/bundles.php:

return [
NextPDF\Symfony\NextPdfBundle::class => ['all' => true],
];

للاطلاع على تسلسل الإقلاع الكامل وسلوك ممرّ المُصرِّف، راجع /⁨integrations/symfony/boot-and-discovery/.⁩

يسجّل ملف config/services.php الخاص بالحزمة الخدمات الآتية:

الخدمة / الاسم المستعاردورة الحياة
NextPDF\Symfony\Service\PdfFactoryمشتركة، عامة؛ احقن هذه
nextpdf.document → PdfDocumentInterface → Documentغير مشتركة، عامة؛ نسخة جديدة عند كل تحليل
NextPDF\Contracts\FontRegistryInterfaceمشتركة، مقفلة بعد الإحماء
NextPDF\Graphics\ImageRegistryمشتركة، kernel.reset
NextPDF\Contracts\DocumentFactoryInterfaceمشتركة
NextPDF\Symfony\Http\PdfResponseمساعِد عام عديم الحالة

ربط المستند غير مشترك عن قصد. يسمح ⁨PSR-11⁩ للحاوية بإرجاع قيم مختلفة عند استدعاءات get() المتتالية للمعرّف نفسه. يمنع إنشاء مستند جديد تسرّب الحالة بين الطلبات في العمّال طويلي التشغيل (⁨PSR-11⁩ §⁨1.1.2⁩). للاطلاع على الجدول الكامل للخدمات والأسماء المستعارة، بما في ذلك روابط ⁨EInvoice⁩ الشرطية، راجع /⁨integrations/symfony/configuration/.⁩

الاسم المستعار للإعدادات هو nextpdf. أنشئ config/packages/nextpdf.yaml. عندما ينشر ⁨Flex⁩ وصفة، يضيف لك نسخة افتراضية. لكل مفتاح قيمة افتراضية، لذلك يكون الحد الأدنى للملف كما يأتي:

nextpdf: ~

شجرة الإعدادات الكاملة موثَّقة في /⁨integrations/symfony/configuration/.⁩

احقن PdfFactory، ثم أرجع المستند باستخدام PdfResponse:

src/Controller/PdfController.php
<?php
declare(strict_types=1);
namespace App\Controller;
use NextPDF\Symfony\Http\PdfResponse;
use NextPDF\Symfony\Service\PdfFactory;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
final class PdfController
{
#[Route('/hello.pdf', name: 'hello_pdf')]
public function hello(PdfFactory $pdf): Response
{
$doc = $pdf->create();
$doc->addPage();
$doc->cell(0, 10, 'Hello from NextPDF on Symfony.');
return PdfResponse::inline($doc, 'hello.pdf');
}
}

للاطلاع على المتحكّم الكامل ومسار ⁨Messenger⁩ غير المتزامن، راجع /⁨integrations/symfony/quickstart/.⁩

تحقّق من الربط من دون كتابة أي كود للتطبيق:

Terminal window
php bin/console debug:container nextpdf
php bin/console debug:config nextpdf
php bin/console lint:container

ينبغي أن يسرد debug:container nextpdf الخدمة PdfFactory، والاسم المستعار nextpdf.document، والسجلّات. يتحقّق lint:container من أن كل وسيط خدمة قابل للحل. لاختبار التوليد، أضف المتحكّم أعلاه، ثم اطلب /hello.pdf.

نقاط الدخول العامة لـ ⁨API⁩

قسم بعنوان «نقاط الدخول العامة لـ ⁨API⁩»

يدعم سطح واجهة برمجة التطبيقات ⁨application programming interface⁩ (⁨API⁩) الرموز العامة الآتية لكود التطبيق:

الرمزالغرض
NextPDF\Symfony\Service\PdfFactory::create()Document جديد ومُهيَّأ مسبقًا
NextPDF\Symfony\Http\PdfResponse::inline() / download()استجابة مُخزَّنة مؤقتًا مع ترويسات أمان
NextPDF\Symfony\Http\PdfResponse::streamInline() / streamDownload()استجابة متدفّقة مقسَّمة إلى أجزاء
NextPDF\Symfony\Message\GeneratePdfMessageكائن نقل بيانات ⁨data transfer object⁩ (⁨DTO⁩) للتوليد غير المتزامن (مُتحقَّق منه)
NextPDF\Symfony\Message\PdfBuilderInterfaceعقد البنّاء الذي يحلّه المعالِج

يسرد كل صف ادعاءً معياريًا واردًا في هذه الصفحة والمواصفة التي يستند إليها.

المواصفةالبندالادعاء
⁨PSR-11⁩⁨§1.1.2⁩عقد المعرّف لدالّتي ⁨has⁩()/⁨get⁩() في الحاوية
⁨PSR-4⁩⁨§2⁩تعيين مساحة الأسماء لمحمّل التحميل التلقائي
  • /⁨integrations/symfony/install/⁩ — المتطلبات والتسجيل.
  • /⁨integrations/symfony/boot-and-discovery/⁩ — الاكتشاف والإقلاع وممرّ المُصرِّف.
  • /⁨integrations/symfony/configuration/⁩ — المخطط الكامل وجدول الخدمات.
  • /⁨integrations/symfony/quickstart/⁩ — متحكّم قابل للتشغيل ومثال غير متزامن.
  • /⁨integrations/symfony/production-usage/⁩ — أمان العمّال والبثّ المتدفّق.