CodeIgniter 4'te NextPDF sorunlarını giderme
Bir bakışta
“Bir bakışta” başlıklı bölümAş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.
Keşif ve çözümleme
“Keşif ve çözümleme” başlıklı bölümServices::pdfDocument() şu değeri döndürüyor: null
“Services::pdfDocument() şu değeri döndürüyor: null” başlıklı bölümCodeIgniter 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 = falseolarak ayarlamış olabilir. Bu durumdanextpdf/codeigniteröğesini$composerPackages['only']içine ekleyin. CodeIgniter, Composer paketlerini yalnızca bu bayraktrueolduğ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-autoloadkomutunu çalıştırın. $aliaseslistesi kısaltıldı. Keşif, yalnızcaConfig\Modules::$aliasesiçindeki girişler için çalışır. Paketinservicesöğesine, yardımcılar için deregistrarsöğesine ihtiyacı vardır. Her iki girişi de geri yükleyin.
pdf() veya pdf_document() tanımsız
“pdf() veya pdf_document() tanımsız” başlıklı bölümYardı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 komutfilesotomatik yükleme listesini yeniden oluşturur. - Şunu doğrulayın:
nextpdf/codeigniteröğesivendor/composer/autoload_files.phpiçinde görünmelidir. - Geçici bir çözüme ihtiyacınız varsa, doğrudan
Services::pdf(false)veyaServices::pdfDocument(false)çağrısını yapın. Yardımcılar, bu çağrıların etrafındaki hafif sarmalayıcılardır.
Yapılandırma
“Yapılandırma” başlıklı bölüm.env geçersiz kılmaları yoksayılıyor
“.env geçersiz kılmaları yoksayılıyor” başlıklı bölümBir 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.fontsPath—nextPdf.fontsPathdeğil. - İç içe bir anahtar için nokta kullanın:
nextpdf.signature.certificate. - Tam nitelikli biçim
NextPDF\CodeIgniter\Config\NextPdf.fontsPathde ç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ümBir 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/.
Çalışma zamanı hataları
“Çalışma zamanı hataları” başlıklı bölümRuntimeException: NextPDF requires the ext-… PHP extension
“RuntimeException: NextPDF requires the ext-… PHP extension” başlıklı bölümYazı 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ümYazı 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.
Yanıt sorunları
“Yanıt sorunları” başlıklı bölümİndirmede dosya adı yanlış görünüyor
“İndirmede dosya adı yanlış görünüyor” başlıklı bölümPdfResponse dosya adlarını temizler. Aşağıdaki doğrulanmış davranışı bekleyin:
- Boş veya yalnızca boşluk içeren bir dosya adı
document.pdfolur. - Bir adın
.pdf(veya.PDF) uzantısı yoksa sonuna.pdfeklenir. Mevcut bir.PDFuzantı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.
Yanıtta güvenlik başlıkları eksik
“Yanıtta güvenlik başlıkları eksik” başlıklı bölümHer 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
“Kuyruk” başlıklı bölümQueueException — iş eklenirken
“QueueException — iş eklenirken” başlıklı bölümKuyruk, 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:
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.
InvalidArgumentException — işten gelen
“InvalidArgumentException — işten gelen” başlıklı bölümİş, 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ğil | non-empty static callable string |
builder şunun dışında: App\PdfBuilders | not allowed |
builder kalıba uyuyor ama çağrılabilir değil | not a valid callable |
outputPath eksik veya boş | non-empty string |
outputPath şunun dışında: WRITEPATH/pdfs/ | outside of allowed directory |
outputPath şununla bitmiyor: .pdf | must 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.
class … BaseJob not found
“class … BaseJob not found” başlıklı bölümPaket 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:
composer require codeigniter4/queueTanılama
“Tanılama” başlıklı bölümcomposer 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 birDocumentolduğunu doğrulayan bir denetleyici kullanın.
Uygunluk
“Uygunluk” başlıklı bölüm- Sınıftan yola eşleme — keşif hatalarıyla ilgilidir (PSR-4 Autoloader §x1.x3).
Ayrıca bkz.
“Ayrıca bkz.” başlıklı bölüm- /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.