İçeriğe geç

CodeIgniter 4'te NextPDF sorunlarını giderme

Aşağıdaki her belirti, paket veya çerçeve kaynaklarında doğrulanmış bir nedene karşılık gelir ve somut bir çözüm içerir.

Services::pdfDocument() şu değeri döndürüyor: null

“Services::pdfDocument() şu değeri döndürüyor: null” başlıklı bölüm

CodeIgniter bir hizmeti çözerken, eşleşen bir yöntemi bulmak için keşfedilen Config\Services sınıflarını tarar. Sonucun null olması, CodeIgniter’ın paketin Services sınıfını keşfetmediği anlamına gelir.

Aşağıdaki nedenleri ve çözümleri kontrol edin:

  • Otomatik keşif devre dışı. Ana uygulama Config\Modules::$discoverInComposer = false olarak ayarlamış olabilir. Bu durumda nextpdf/codeigniter öğesini $composerPackages['only'] içine ekleyin. CodeIgniter, Composer paketlerini yalnızca bu bayrak true olduğunda tarar.
  • Otomatik yükleyici eski. Composer, NextPDF\CodeIgniter\ ad alanı önekini temel dizine eşler. Eski bir sınıf haritası sınıfı gizler (PSR-4 §x1.x3). composer dump-autoload komutunu çalıştırın.
  • $aliases listesi kısaltıldı. Keşif, yalnızca Config\Modules::$aliases içindeki girişler için çalışır. Paketin services öğesine, yardımcılar için de registrars öğesine ihtiyacı vardır. Her iki girişi de geri yükleyin.

Yardımcılar iki yolla yüklenir: paketin Composer files otomatik yükleme girişi ve paketin Registrar öğesi. Tanımsız işlev hatası, files girişinin yüklenmediğini gösterir.

  • Şunu çalıştırın: composer dump-autoload — bu komut files otomatik yükleme listesini yeniden oluşturur.
  • Şunu doğrulayın: nextpdf/codeigniter öğesi vendor/composer/autoload_files.php içinde görünmelidir.
  • Geçici bir çözüme ihtiyacınız varsa, doğrudan Services::pdf(false) veya Services::pdfDocument(false) çağrısını yapın. Yardımcılar, bu çağrıların etrafındaki hafif sarmalayıcılardır.

Bir geçersiz kılmayı çözerken BaseConfig, küçük harfli kısa sınıf adını önek olarak kullanır. Sınıf NextPdf olduğundan önek nextpdf olur; nextPdf veya NextPdf olmaz.

  • Şunu kullanın: nextpdf.fontsPathnextPdf.fontsPath değil.
  • İç içe bir anahtar için nokta kullanın: nextpdf.signature.certificate.
  • Tam nitelikli biçim NextPDF\CodeIgniter\Config\NextPdf.fontsPath de çalışır.

Tüm bir yapılandırma dizisi varsayılanlara dönüyor

“Tüm bir yapılandırma dizisi varsayılanlara dönüyor” başlıklı bölüm

Bir NextPdf sınıfını genişletip kısmi bir dizi atadığınızda, CodeIgniter dizinin tamamını değiştirir. Geçersiz kıldığınız dizideki her anahtarı sağlayın. Tam dizi örneği için bkz. /integrations/codeigniter/configuration/.

RuntimeException: NextPDF requires the ext-… PHP extension

“RuntimeException: NextPDF requires the ext-… PHP extension” başlıklı bölüm

Yazı tipi kayıt defteri, mbstring ve zlib uzantılarını işlem başına bir kez doğrular. Bu hatayı eksik uzantının adıyla üretir. Adı belirtilen uzantıyı çalışma zamanı PHP ortamında kurun veya etkinleştirin, ardından işçiyi ya da PHP FastCGI İşlem Yöneticisi (PHP-FPM) havuzunu yeniden başlatın.

RuntimeException: NextPdf fontsPath contains invalid characters

“RuntimeException: NextPdf fontsPath contains invalid characters” başlıklı bölüm

Yazı tipi kayıt defteri, bir fontsPath değeri akış sarmalayıcısı (://) veya boş bayt içeriyorsa onu reddeder. fontsPath değerini düz bir dosya sistemi yoluna ayarlayın. php://, phar:// veya benzeri sarmalanmış bir yola yönlendirmeyin.

PdfResponse dosya adlarını temizler. Aşağıdaki doğrulanmış davranışı bekleyin:

  • Boş veya yalnızca boşluk içeren bir dosya adı document.pdf olur.
  • Bir adın .pdf (veya .PDF) uzantısı yoksa sonuna .pdf eklenir. Mevcut bir .PDF uzantısı olduğu gibi korunur.
  • ASCII olmayan karakterler içeren bir ad, bir ASCII yedeği ve bir RFC 5987 filename*=UTF-8''… parametresi üretir; böylece modern tarayıcılar özgün adı gösterir. Bu beklenen bir durumdur, hata değildir.
  • Yol ayırıcılar, boş baytlar ve carriage return/line feed (CR/LF) karakterleri kaldırılır.

Her PdfResponse, X-Content-Type-Options, X-Frame-Options, Content-Security-Policy, X-Robots-Tag ve Referrer-Policy başlıklarını içerir. İstemcide görünmüyorlarsa, akışın ilerleyen aşamasındaki bir vekil sunucu ya da uygulama bunları kaldırıyor veya üzerlerine yazıyordur. Yanıtı hem ters vekil sunucunuzdan önce hem de sonra inceleyin.

Kuyruk, eklenen iş adını Config\Queue::$jobHandlers içindeki anahtarlarla karşılaştırır ve kayıtlı olmayan her adı reddeder. İşi bir ad anahtarı altında kaydedin, ardından o adla ekleyin:

app/Config/Queue.php
public array $jobHandlers = ['generate-pdf' => GeneratePdfJob::class];
// dispatch
\service('queue')->push('pdf-queue', 'generate-pdf', [...]);

İş adı olarak GeneratePdfJob::class kullanmak başarısız olur. İkinci bağımsız değişken bir ad anahtarıdır, bir sınıf dizesi değildir.

İş, herhangi bir işlem yapmadan önce yükü doğrular. Bu doğrulanmış reddetme durumları şu ileti parçalarını döndürür:

Nedenİleti parçası
builder eksik, boş veya bir dize değilnon-empty static callable string
builder şunun dışında: App\PdfBuildersnot allowed
builder kalıba uyuyor ama çağrılabilir değilnot a valid callable
outputPath eksik veya boşnon-empty string
outputPath şunun dışında: WRITEPATH/pdfs/outside of allowed directory
outputPath şununla bitmiyor: .pdfmust end with .pdf

Yükü, builder bir App\PdfBuilders\<Class>::<method> statik çağrılabiliri olacak şekilde düzeltin. Çıktı yolunun WRITEPATH/pdfs/ içinde ve bir .pdf uzantısıyla çözümlendiğinden emin olun.

Paket için codeigniter4/queue yalnızca geliştirmeye yönelik bir bağımlılık olduğundan, işçileri çalıştıran uygulamanın bunu doğrudan bağımlılık olarak eklemesi gerekir:

Terminal window
composer require codeigniter4/queue
  • composer show nextpdf/codeigniter — Composer’ın paketi çözümlediğini doğrulayın.
  • composer dump-autoload — keşfi ve yardımcıların otomatik yükleme listesini yeniden oluşturun.
  • php spark routes — PDF rotalarınızın kayıtlı olduğunu doğrulayın.
  • En hızlı keşif kontrolü için, Services::pdfDocument(false) çağrısını yapan ve sonucun bir Document olduğunu doğrulayan bir denetleyici kullanın.
  • Sınıftan yola eşleme — keşif hatalarıyla ilgilidir (PSR-4 Autoloader §x1.x3).
  • /integrations/codeigniter/install/ — keşif gereksinimleri.
  • /integrations/codeigniter/configuration/ — .env öneki ve dizi geçersiz kılma kuralı.
  • /integrations/codeigniter/production-usage/ — doğru kuyruk kaydı.
  • /integrations/codeigniter/boot-and-discovery/ — keşif dizisi.