Lewati ke konten

Integrasi NextPDF untuk CodeIgniter

Instal paketnya, lalu CodeIgniter 4 akan merangkainya untuk Anda. Gunakan halaman ini untuk memverifikasi perangkaian tersebut: discovery, model binding, penerbitan konfigurasi, dan smoke test dengan satu metode yang membuktikan integrasi berfungsi.

Terminal window
composer require nextpdf/codeigniter

Anda tidak perlu menyunting service provider maupun mengubah berkas bootstrap. Lihat /integrations/codeigniter/install/ untuk batasan versi yang telah diverifikasi.

CodeIgniter 4 menemukan paket melalui discovery paket Composer saat Config\Modules::$discoverInComposer bernilai true, yaitu nilai standar framework. Prefiks PHP Standard Recommendation 4 (PSR-4) NextPDF\CodeIgniter\ dipetakan ke src/CodeIgniter/, sehingga framework dapat menyelesaikan NextPDF\CodeIgniter\Config\Services ke berkasnya (PSR-4 §x1.x3). /integrations/codeigniter/boot-and-discovery/ mendokumentasikan urutan lengkapnya beserta properti Config\Modules yang mengaturnya.

CodeIgniter 4 tidak menyertakan container PSR-11. PSR-11 §1.3 tidak menganjurkan pola service-locator (modal SHOULD NOT). Paket ini mengikuti konvensi locator framework dan menjaga penggunaannya tetap minimal. Setiap binding adalah factory statis bernama dengan parameter bool $getShared.

Nama layananMengembalikanMasa hidup standar
fontRegistryFontRegistryInterfaceshared
imageRegistryImageRegistryshared
documentFactoryDocumentFactoryInterfaceshared
pdfDocumentDocumentfresh
pdfPdffresh
tsaClient?TsaClientshared
pdfSigner?SignerInterfacefresh

Gunakan salah satu titik masuk berikut; keduanya setara:

<?php
declare(strict_types=1);
use NextPDF\CodeIgniter\Config\Services;
$a = Services::pdf(false); // direct
$b = \service('pdf'); // helper → Services::pdf()

Helper global pdf() dan pdf_document() membungkus Services::pdf(false) dan Services::pdfDocument(false).

Konfigurasi paket berada di NextPDF\CodeIgniter\Config\NextPdf, sebuah BaseConfig non-final. Anda dapat menimpanya melalui salah satu dari dua cara yang didukung:

1. Perluas kelas (bertipe dan dikontrol versi). Buat app/Config/NextPdf.php:

<?php
declare(strict_types=1);
namespace Config;
use NextPDF\CodeIgniter\Config\NextPdf as BaseNextPdf;
final class NextPdf extends BaseNextPdf
{
public int $imageCacheMb = 100;
}

CodeIgniter memuat kelas aplikasi Anda alih-alih nilai standar paket.

2. Timpa dengan .env (per-lingkungan). Gunakan nama pendek kelas dalam huruf kecil, nextpdf, sebagai prefiks:

nextpdf.imageCacheMb = 100
nextpdf.signature.enabled = true
nextpdf.signature.certificate = /etc/nextpdf/cert.pem

/integrations/codeigniter/configuration/ mendokumentasikan setiap kunci dan aturan penimpaan array.

CodeIgniter tidak memiliki service provider atau kelas bundle untuk diuji. Gunakan smoke test yang setara untuk memeriksa dua hal: discovery telah menyelesaikan layanan, dan masa hidupnya berperilaku sesuai spesifikasi. Aksi controller di bawah ini dapat dijalankan dan mencerminkan asersi fungsional milik paket itu sendiri.

<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\ResponseInterface;
use NextPDF\CodeIgniter\Config\Services;
use NextPDF\CodeIgniter\Libraries\Pdf;
use NextPDF\Core\Document;
final class NextPdfSmokeController extends BaseController
{
public function check(): ResponseInterface
{
// Discovery resolved the services.
$document = Services::pdfDocument(false);
$library = Services::pdf(false);
// Documents are fresh per call (no cross-request leakage).
$freshIsolated = Services::pdfDocument(false) !== $document;
// Registries are shared singletons.
$registrySingleton = Services::fontRegistry() === Services::fontRegistry();
// Optional services degrade to null without Premium / TSA config.
$signerOptional = Services::pdfSigner(false) === null;
$ok = $document instanceof Document
&& $library instanceof Pdf
&& $freshIsolated
&& $registrySingleton
&& $signerOptional;
return $this->response
->setStatusCode($ok ? 200 : 500)
->setJSON([
'discovery' => $document instanceof Document,
'document_fresh_per_call' => $freshIsolated,
'registry_shared' => $registrySingleton,
'signer_optional_null' => $signerOptional,
]);
}
}

Petakan sebuah route ke aksi ini, lalu akses route tersebut. Respons 200 dengan semua flag bernilai true membuktikan integrasi. Setiap asersi di sini sesuai dengan perilaku yang diverifikasi dalam suite pengujian fungsional paket.

  • Jika aplikasi host menonaktifkan discovery Composer, tambahkan nextpdf/codeigniter ke Config\Modules::$composerPackages['only'].
  • Services::pdfDocument(true) mengembalikan dokumen bersama. Ini hanya tersedia untuk reset pengujian. Jangan pernah meminta dokumen bersama di dalam kode request atau job.
  • Services::pdfSigner() dan Services::tsaClient() mengembalikan null hingga endpoint penandatanganan atau Time-Stamping Authority (TSA) dikonfigurasi. Ini adalah perilaku degradasi yang disengaja dan terkendali, bukan kegagalan.
  • Pemetaan class-path untuk discovery modul (PSR-4 Autoloader §x1.x3).
  • Panduan service-locator untuk model binding (PSR-11 Container §1.3).

NextPDF core menggunakan lisensi Apache-2.0. Setelah Anda menginstal Pro atau Enterprise, layanannya muncul pada permukaan Services yang sama. Paket CodeIgniter mengekspos metode layanan yang sesuai. Setiap metode mengembalikan null hingga Anda menginstal paket Premium yang sesuai. Lihat </get-license/?intent=codeigniter>.

  • /integrations/codeigniter/boot-and-discovery/ — seluk-beluk discovery.
  • /integrations/codeigniter/install/ — batasan versi dan verifikasi.
  • /integrations/codeigniter/quickstart/ — PDF pertama.
  • /integrations/codeigniter/production-usage/ — controller yang dirangkai lewat dependency injection dan job antrean.
  • /integrations/codeigniter/configuration/ — setiap kunci konfigurasi.