Boot dan discovery pada NextPDF CodeIgniter
Sekilas
Bagian berjudul “Sekilas”CodeIgniter 4 menemukan kelas Services, fungsi helper, dan registrar paket melalui discovery paket Composer. Halaman ini menjelaskan urutannya beserta konfigurasi yang mengendalikannya.
Cara kerja discovery Services di CodeIgniter
Bagian berjudul “Cara kerja discovery Services di CodeIgniter”CodeIgniter 4 melakukan resolve terhadap sebuah service dengan memindai setiap kelas Config\Services yang ditemukan untuk mencari metode statis yang cocok dengan nama service yang diminta. Ketika aplikasi Anda memanggil service('pdf'), framework menemukan kelas Services pertama dalam hasil discovery yang mendeklarasikan metode pdf, lalu memanggil metode tersebut.
Discovery dikendalikan oleh Config\Modules:
$enabled— sakelar utama untuk discovery otomatis. Standarnyatrue.$discoverInComposer— memperluas discovery ke paket Composer. Standarnyatrue. Flag ini memungkinkan framework menemukannextpdf/codeigniter.$composerPackages— filteronly/excludeopsional untuk sekumpulan paket Composer.$aliases— tipe elemen yang berpartisipasi dalam discovery. Standar framework mencakupservicesdanregistrars, dan paket ini menggunakan keduanya.
Kelas paket ini adalah NextPDF\CodeIgniter\Config\Services. Composer memetakan prefix PHP Standards Recommendation 4 (PSR-4) NextPDF\CodeIgniter\ ke src/CodeIgniter/. Nama kelas yang sepenuhnya terkualifikasi harus memiliki namespace tingkat atas (PSR-4 §x1.x2.p5, modal MUST). Prefix namespace dipetakan ke direktori basis, sehingga kelas tersebut dapat diselesaikan ke berkasnya (PSR-4 §x1.x3).
Urutan boot
Bagian berjudul “Urutan boot”- Autoload Composer. Composer mendaftarkan peta PSR-4 dan entri autoload
files. Pada titik ini, Composer memuat berkas helpersrc/CodeIgniter/Helpers/pdf_helper.php. - Bootstrap framework. CodeIgniter membaca
Config\Modules. Ketika discovery diaktifkan, framework menyusun daftar elemen yang ditemukan di seluruh paket Composer. - Discovery registrar. Framework mengumpulkan kelas
Registrar.Registrar::Autoload()milik paket ini mendaftarkan helperpdfke pemuat helper CodeIgniter. - Penyelesaian service pada panggilan pertama. Factory service bersifat lazy. Panggilan pertama ke
service('pdf')atauServices::pdf()menjalankan factory. Service bersama di-cache pada locator selama proses berlangsung.
Binding container
Bagian berjudul “Binding container”CodeIgniter 4 tidak menyediakan container PSR-11. Sebagai gantinya, metode factory statis di kelas Services berperan sebagai binding. Setiap metode menerima parameter bool $getShared:
| Service | Bersama secara default | Catatan |
|---|---|---|
fontRegistry | ya | Dipanaskan terlebih dahulu, lalu dikunci. |
imageRegistry | ya | Cache least recently used (LRU) dengan batas ukuran. |
documentFactory | ya | Tanpa state (stateless). |
pdfDocument | tidak | Dibuat baru pada setiap pemanggilan. |
pdf | tidak | Dibuat baru pada setiap pemanggilan. |
tsaClient | ya | null ketika tidak ada URL Time-Stamp Authority (TSA) yang dikonfigurasi. |
pdfSigner | tidak | null ketika penandatanganan dinonaktifkan. |
Instans bersama disimpan dalam cache instans BaseService milik CodeIgniter selama proses berlangsung. Test harness framework membersihkan cache tersebut dengan BaseService::reset(), dan uji fungsional paket ini mengandalkan reset tersebut di antara setiap kasus uji.
Urutan penyelesaian konfigurasi
Bagian berjudul “Urutan penyelesaian konfigurasi”Konfigurasi efektif diselesaikan dalam urutan berikut:
- Nilai standar paket di
NextPDF\CodeIgniter\Config\NextPdf. - Kelas aplikasi
Config\NextPdfyang memperluas kelas paket, jika ada. CodeIgniter memuatnya alih-alih nilai standar paket. - Penggantian (override) lingkungan yang diterapkan oleh
BaseConfig, dengan kunci berupa nama kelas singkat huruf kecilnextpdf(kunci bersarang bertanda titik, atau bentuk kelas yang sepenuhnya terkualifikasi).
Berkas ekstensi konfigurasi aplikasi mendeklarasikan satu kelas dan tidak memiliki efek samping. Ini menjaganya tetap selaras dengan ekspektasi PSR-1 bahwa sebuah berkas hanya mendeklarasikan simbol atau menjalankan logika berefek samping, tetapi tidak keduanya (PSR-1 §x1.x1.p3). Berkas helper menjadi pasangannya yang memang sengaja berefek samping. Berkas tersebut mendeklarasikan fungsi global pdf() dan pdf_document(); masing-masing dilindungi oleh pemeriksaan function_exists sehingga pemuatan berulang tetap aman.
Diagnostik
Bagian berjudul “Diagnostik”composer dump-autoload— membangun ulang peta PSR-4 dan daftar autoloadfilessetelah peningkatan versi.- Untuk menguji discovery dengan cepat, gunakan controller yang memanggil
Services::pdfDocument(false)dan memastikan kembaliannya berupaDocument. - Periksa
vendor/composer/autoload_files.phpuntuk memastikan berkas helper telah terdaftar. - Lihat /integrations/codeigniter/troubleshooting/ untuk memetakan kegagalan ke penyebabnya.
Kesesuaian
Bagian berjudul “Kesesuaian”- Nama kelas yang sepenuhnya terkualifikasi memerlukan namespace tingkat atas (PSR-4 Autoloader §x1.x2.p5).
- Pemetaan prefix namespace ke direktori basis untuk jalur kelas (PSR-4 Autoloader §x1.x3).
- Sebuah berkas mendeklarasikan simbol atau menimbulkan efek samping — desain berkas helper (PSR-1 Basic Coding Standard §x1.x1.p3).
Lihat juga
Bagian berjudul “Lihat juga”- /integrations/codeigniter/integration/ — referensi penyambungan (wiring) dan smoke test.
- /integrations/codeigniter/install/ — memasang dan memverifikasi discovery.
- /integrations/codeigniter/overview/ — permukaan application programming interface (API) secara keseluruhan.
- /integrations/codeigniter/troubleshooting/ — mode kegagalan discovery.