İçeriğe geç

Symfony API başvuru kılavuzu

Symfony paketi; paket kaydı, yapılandırma ağacı, yeni belgeler için enjekte edilebilir fabrika, Köprü Metni Aktarım Protokolü (HTTP) yanıt yardımcıları ve asenkron üretim için Messenger türleri sunar. Uygulama kodunun büyük bölümü yalnızca iki sembol kullanır: belge oluşturmak için enjekte ettiğiniz PdfFactory hizmeti — bununla bir Document oluşturursunuz — ve bu belgeyi güvenli bir HTTP yanıtına dönüştüren PdfResponse yardımcısı. Geri kalan semboller (paket, uzantı, derleyici geçişi, yapılandırma ağacı, Messenger veri aktarım nesnesi (DTO) ve işleyici), bir kez yapılandırdığınız veya çerçevenin sizin yerinize yönettiği bağlantı katmanıdır.

Buradan başlayın: NextPDF\Symfony\Service\PdfFactory hizmetini enjekte edin, create() çağrısıyla yeni bir Document elde edin ve bunu NextPDF\Symfony\Http\PdfResponse::download() ile döndürün. İlk örnek bu akışı gösterir.

En yaygın görevler için bu üç çalıştırılabilir kod parçasını kullanın. Her kod parçası yalnızca aşağıdaki tablolarda belgelenmiş doğrulanmış sembolleri kullanır.

Bir denetleyiciden Taşınabilir Belge Biçimi (PDF) indirme yanıtı döndürün: fabrikayı enjekte edin, bir belge oluşturun ve bunu yanıt yardımcısına iletin:

<?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 InvoiceController
{
#[Route('/invoice/{number}', name: 'invoice_pdf')]
public function download(PdfFactory $pdf, string $number): Response
{
$doc = $pdf->create();
$doc->addPage();
$doc->setFont('dejavusans', '', 12);
$doc->cell(0, 10, "Invoice #{$number}");
return PdfResponse::download($doc, "invoice-{$number}.pdf");
}
}

Ne yapar: PdfFactory::create(), yeni ve önceden yapılandırılmış bir Document döndürür. PdfResponse::download(), bunu Content-Type: application/pdf, ek (attachment) disposition’ı ve paketin sabit güvenlik üst bilgileriyle birlikte gönderir.

En yüksek bellek kullanımını düşük tutmak için büyük bir PDF’yi akış olarak gönderin: akış yardımcısını kullanın ve bir StreamedResponse döndürün:

<?php
declare(strict_types=1);
namespace App\Controller;
use NextPDF\Symfony\Http\PdfResponse;
use NextPDF\Symfony\Service\PdfFactory;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\Routing\Attribute\Route;
final class ReportController
{
#[Route('/report', name: 'report_pdf')]
public function report(PdfFactory $pdf): StreamedResponse
{
$doc = $pdf->create();
$doc->addPage();
$doc->setFont('dejavusans', '', 12);
$doc->cell(0, 10, 'Annual report');
return PdfResponse::streamDownload($doc, 'annual-report.pdf');
}
}

Ne yapar: PdfResponse::streamDownload(), oluşturulmuş PDF’yi parçalar hâlinde gönderir ve Content-Length başlığını atlar; satır içi eşdeğeri için streamInline() kullanın.

Bir PDF’yi asenkron üretim için kuyruğa gönderin: işlemenin bir işçi (worker) üzerinde çalışması için bir Messenger taşıyıcısına GeneratePdfMessage gönderin:

<?php
declare(strict_types=1);
namespace App\Controller;
use App\Pdf\InvoicePdfBuilder;
use NextPDF\Symfony\Message\GeneratePdfMessage;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Routing\Attribute\Route;
final class QueueController
{
#[Route('/invoice/{id}/queue', name: 'invoice_queue')]
public function queue(MessageBusInterface $bus, int $id): Response
{
$bus->dispatch(new GeneratePdfMessage(
builderClass: InvoicePdfBuilder::class,
outputPath: '/var/storage/invoices/' . $id . '.pdf',
builderContext: ['invoice_id' => $id],
));
return new Response('PDF generation queued.', 202);
}
}

Ne yapar: DTO, bir oluşturucu sınıf dizesi (class-string) ve doğrulanmış bir çıktı yolu taşır. İşleyici, oluşturucuyu çözümler, belgeyi oluşturur ve işçi (worker) üzerinde kaydeder. Oluşturucu sınıfı PdfBuilderInterface arayüzünü uygular ve bir hizmet konumlandırıcısına (service locator) kaydedilir (konumlandırıcı ve işçi bağlantısı için Symfony hızlı başlangıç kılavuzuna bakın).

Yeni belgeler üreten enjekte edilebilir hizmetin tam yapıcı imzası ve create() sözleşmesi için bu tabloyu kullanın.

SembolParametrelerVarsayılan davranışDöndürürİstisna veya başarısızlık durumuNotlar
new PdfFactory(DocumentFactoryInterface $factory, array $defaults, ?string $pdfa, array $artisanConfig)factory: çekirdek fabrika; defaults: oluşturucu, yazar, dil, kenar boşlukları; pdfa: isteğe bağlı PDF/A profili; artisanConfig: isteğe bağlı Chrome işleyici yapılandırması.Varsayılanlar yalnızca yapılandırıldığında uygulanır.PdfFactoryKonteyner bağlantı hataları.Hizmet tekil (singleton) olabilir, çünkü create() yeni bir belge döndürür.
PdfFactory::create()yok.Oluşturucuyu ve dili uygular; yazarı yalnızca boş olmadığında uygular; PDF/A ve Artisan yapılandırmasını yalnızca kullanılabilir olduğunda uygular.NextPDF\Core\DocumentÇekirdek yapılandırma hataları.Her istek, komut veya mesaj başına bir kez kullanın.
PdfFactory::setArtisanAvailable(bool $available)available: derleme zamanı kullanılabilirlik bayrağı.Derleyici geçişi etkinleştirene kadar devre dışıdır.voidBeklenen yok.İsteğe bağlı uzantı derleyici geçişi tarafından çağrılan dahili kanca (hook).
PdfFactory::setProAvailable(bool $available)available: derleme zamanı kullanılabilirlik bayrağı.Derleyici geçişi etkinleştirene kadar devre dışıdır.voidBeklenen yok.Premium kullanılabilirliği için dahili kanca (hook).

Bağlantı katmanı için ilk tabloyu kullanın: paket kaydı, nextpdf yapılandırma ağacı ve isteğe bağlı uzantı algılaması. İkinci tablo yapılandırma anahtarlarını listeler.

SembolParametrelerVarsayılan davranışDöndürürİstisna veya başarısızlık durumuNotlar
NextPdfBundle::build(ContainerBuilder $container)Symfony konteyner oluşturucusu.Üst sınıfın build yöntemini çağırır ve OptionalExtensionPass sınıfını kaydeder.voidDerleyici geçişi kayıt hataları.İsteğe bağlı Artisan ve Premium özellik algılamasını etkinleştirir.
NextPdfBundle::getPath()yok.Paket kök yolunu döndürür.stringBeklenen yok.Symfony paket keşfi ve kaynak yükleme tarafından kullanılır.
NextPdfExtension::load(array $configs, ContainerBuilder $container)Kullanıcı yapılandırma dizileri ve konteyner oluşturucusu.Sağlanan nextpdf yapılandırmasını işler, çözümlenmiş parametreleri saklar, hizmet tanımlarını yükler ve gerekli uzantıları denetler.voidYapılandırma doğrulama, hizmet yükleme veya eksik uzantı hataları.Gerekli uzantılar mbstring ve zlib uzantılarıdır.
NextPdfExtension::getAlias()yok.Kök yapılandırma anahtarı olarak nextpdf kullanır.stringBeklenen yok.Paketi nextpdf: altında yapılandırın.
Configuration::getConfigTreeBuilder()yok.Doğrulanmış nextpdf yapılandırma ağacını tanımlar.TreeBuilderSymfony yapılandırma tanımlama hataları.Uygulanabilir olduğunda Laravel yapılandırma biçimini yansıtır.
OptionalExtensionPass::process(ContainerBuilder $container)Symfony konteyner oluşturucusu.İsteğe bağlı Artisan ve Premium hizmetlerini algılar ve fabrika kullanılabilirlik bayraklarını değiştirir.voidDerleyici geçişi bağlantı hataları.Konteyner derlemesi sırasında çalışır.
Yapılandırma anahtarıTürVarsayılan davranışNotlar
page_formatenumA4; izin verilen değerler A3, A5, Letter, Legal ve Tabloid değerlerini içerir.Varsayılan belge oluşturmaya uygulanır.
orientationenumP; izin verilen değerler P ve L değerleridir.Bir sayfa farklı bir yönlendirmeye ihtiyaç duyduğunda açık belge çağrıları kullanın.
unitenummm; izin verilen değerler pt, mm, cm ve in değerleridir.Çerçeve varsayılanlarını çekirdek birimlerle hizalı tutar.
pdfa`stringnull`null; izin verilen değerler 4, 4e ve 4f değerleridir.
fonts_path / cache_pathstringProje yazı tipleri yolu ve çekirdek (kernel) önbellek yolu.Her yolu, çalışma zamanı rolüne göre okunabilir veya yazılabilir tutun.
signature.*arrayVarsayılan olarak devre dışıdır; imza düzeyi B-B.Sertifika, anahtar, parola, ek sertifikalar ve düzey sağlar.
tsa.*arrayTekdüzen Kaynak Konumlandırıcı (URL) null olduğunda devre dışıdır; zaman aşımı varsayılan olarak 30 saniyedir.Kimlik bilgilerini, karşılıklı Aktarım Katmanı Güvenliği (mTLS) dosyalarını, ortak anahtar sabitlemelerini (pin) ve HTTP politikasını destekler.
ocsp_cache.*array86400 saniyelik bir yaşam süresi (TTL) ile etkindir.Kullanılabilir olduğunda doğrulama ve uzun vadeli imza akışları tarafından kullanılır.
messenger.*arrayTaşıyıcı async, zaman aşımı 120, yeniden denemeler 3.Asenkron üretim iş akışları tarafından kullanılır.
artisan.*arrayChrome işleyici, yapılandırılıp kurulmadığı sürece devre dışıdır.İsteğe bağlı işleyici kullanılabilir olduğunda ChromeRendererConfig ile eşlenir.
defaults.*arrayOluşturucu NextPDF, yazar boş, dil en, varsayılan kenar boşlukları ve yazı tipi.Bunu PdfFactory::create() uygular.

Görüntüleme moduna ve arabelleğe almaya göre bir yanıt yardımcısı seçmek için bu tabloyu kullanın: satır içi görüntüleme veya indirme, arabelleğe alınmış ya da akışlı. Tablo ayrıca dosya adı ve üst bilgi davranışını da gösterir.

SembolParametrelerVarsayılan davranışDöndürürİstisna veya başarısızlık durumuNotlar
PdfResponse::inline(Document $document, string $filename = 'document.pdf')document: oluşturulmuş belge; filename: yanıt dosya adı.Eksik olduğunda .pdf ekler.Symfony\Component\HttpFoundation\ResponseÇekirdek serileştirme hataları.PDF içerik türünü ve koruyucu üst bilgileri ayarlar.
PdfResponse::download(Document $document, string $filename = 'document.pdf')Tıpkı inline gibi; disposition’ı ek (attachment) olarak ayarlanır.Tarayıcı indirme yanıtı.ResponseTıpkı inline gibi.Doğrudan indirmeler için kullanın.
PdfResponse::streamInline(Document $document, string $filename = 'document.pdf')Tıpkı inline gibi.Oluşturulmuş PDF baytlarını parçalar hâlinde gönderir.StreamedResponseTıpkı inline gibi.Belgenin oluşturulmasını ortadan kaldırmaz.
PdfResponse::streamDownload(Document $document, string $filename = 'document.pdf')Tıpkı streamInline gibi; disposition’ı ek (attachment) olarak ayarlanır.Akışlı indirme yanıtı.StreamedResponseTıpkı streamInline gibi.İşlemeden önce çıktı boyutu politikasını uygulayın.

Asenkron yol için bu tabloyu kullanın: gönderdiğiniz mesaj DTO’su, uyguladığınız oluşturucu arayüzü ve işçi (worker) üzerinde çalışan işleyici.

SembolParametrelerVarsayılan davranışDöndürürİstisna veya başarısızlık durumuNotlar
new GeneratePdfMessage(string $builderClass, string $outputPath, array $builderContext = [])builderClass: PdfBuilderInterface arayüzünü uygulayan sınıf dizesi (class-string); outputPath: hedef .pdf; builderContext: serileştirilebilir veri.Boş bağlam dizisi.Mesaj DTO’su.InvalidArgumentException: geçersiz tam nitelikli sınıf adı (FQCN), akış sarmalayıcısı, boş bayt, geçiş (traversal), boş yol veya .pdf olmayan hedef için fırlatılır.Messenger taşıyıcıları kapanışları (closure) değil, veri taşır.
PdfBuilderInterface::build(Document $document, array $context): Documentdocument: yeni yapılandırılmış belge; context: serileştirilebilir mesaj verisi.Mesaj değerinin ötesinde varsayılan bağlam yoktur.Yapılandırılmış Document.Oluşturucuya özgü istisnalar.Oluşturucuları belirlenimci (deterministic) ve etkisiz (idempotent) yapın.
new GeneratePdfHandler(PdfFactory $pdfFactory, ContainerInterface $builderLocator)PDF fabrikası ve etiketlenmiş oluşturucu hizmet konumlandırıcısı.Yapım sırasında hiçbir belge oluşturulmaz.GeneratePdfHandlerKonteyner bağlantı hataları.Konumlandırıcı yalnızca PdfBuilderInterface uygulamalarını açığa çıkarmalıdır.
GeneratePdfHandler::__invoke(GeneratePdfMessage $message)message: doğrulanmış mesaj DTO’su.Oluşturucuyu konteynerden çözümler, belgeyi oluşturur ve kaydeder.voidEksik oluşturucu hizmeti, geçersiz oluşturucu sonucu, çekirdek yazma hataları.Statik geri çağrılar yerine hizmet oluşturucularını tercih edin.
  • Bir Document nesnesini hizmet olarak saklamayın. PdfFactory nesnesini saklayın ve her iş birimi için create() çağrısını yapın.
  • Yalnızca serileştirilebilir bağlamı kuyruğa alın. Açık akışları, kapanışları (closure) veya istek nesnelerini builderContext içine koymayın.
  • Dağıtımda kiracıya özgü depolama kökleri olduğunda, DTO’nun sağladığından daha katı bir çıktı yolu politikası kullanın.