NextPDF CodeIgniter-boot en -discovery
In het kort
Sectie met titel “In het kort”CodeIgniter 4 ontdekt de Services-klasse, helperfuncties en de registrar van het package via Composer-package-discovery. Deze pagina beschrijft de volgorde en de configuratie die dit aanstuurt.
Hoe CodeIgniter Services-discovery werkt
Sectie met titel “Hoe CodeIgniter Services-discovery werkt”CodeIgniter 4 lost een service op door in elke ontdekte Config\Services-klasse te zoeken naar een statische methode die overeenkomt met de gevraagde servicenaam. Wanneer je applicatie service('pdf') aanroept, vindt het framework de eerste ontdekte Services-klasse die een pdf-methode declareert en roept die vervolgens aan.
Discovery wordt geregeld door Config\Modules:
$enabled— de primaire schakelaar voor auto-discovery. Standaardtrue.$discoverInComposer— breidt discovery uit naar Composer-packages. Standaardtrue. Met deze vlag kan het frameworknextpdf/codeignitervinden.$composerPackages— een optioneelonly- /exclude-filter voor de set Composer-packages.$aliases— de elementtypen die deelnemen aan discovery. De standaardinstelling van het framework bevatservicesenregistrars, en dit package gebruikt beide.
De package-klasse is NextPDF\CodeIgniter\Config\Services. Composer koppelt de PHP Standards Recommendation 4 (PSR-4)-prefix NextPDF\CodeIgniter\ aan src/CodeIgniter/. Een volledig gekwalificeerde klassenaam MOET een top-level namespace hebben (PSR-4 §x1.x2.p5, modaal MUST). De namespace-prefix wordt gekoppeld aan de basismap, zodat de klasse naar het bijbehorende bestand wordt herleid (PSR-4 §x1.x3).
Bootvolgorde
Sectie met titel “Bootvolgorde”- Composer-autoload. Composer registreert de PSR-4-map en de
files-autoload-vermeldingen. Op dit punt laadt Composer het helperbestandsrc/CodeIgniter/Helpers/pdf_helper.php. - Framework-bootstrap. CodeIgniter leest
Config\Modules. Wanneer discovery is ingeschakeld, bouwt het framework de lijst met ontdekte elementen op voor alle Composer-packages. - Registrar-discovery. Het framework verzamelt
Registrar-klassen. DeRegistrar::Autoload()van het package maakt depdf-helper bekend bij de helper-loader van CodeIgniter. - Service-resolutie bij de eerste aanroep. Service-factories zijn lazy. De eerste aanroep van
service('pdf')ofServices::pdf()voert de factory uit. Gedeelde services worden voor de duur van het proces in de cache van de locator bewaard.
Container-bindings
Sectie met titel “Container-bindings”CodeIgniter 4 biedt geen PSR-11-container. In plaats daarvan fungeren de statische factory-methoden op de Services-klasse als de bindings. Elke methode accepteert een bool $getShared-parameter:
| Service | Standaard gedeeld | Opmerkingen |
|---|---|---|
fontRegistry | ja | Voorverwarmd en daarna vergrendeld. |
imageRegistry | ja | Begrensde least recently used (LRU)-cache. |
documentFactory | ja | Stateless. |
pdfDocument | nee | Vers per aanroep. |
pdf | nee | Vers per aanroep. |
tsaClient | ja | null wanneer er geen Time-Stamp Authority (TSA)-URL is geconfigureerd. |
pdfSigner | nee | null wanneer ondertekenen is uitgeschakeld. |
Gedeelde instanties bevinden zich voor de duur van het proces in de instantiecache van BaseService van CodeIgniter. Het testharnas van het framework leegt die cache met BaseService::reset(), en de functionele tests van het package gaan uit van die reset tussen testcases.
Volgorde van configuratieresolutie
Sectie met titel “Volgorde van configuratieresolutie”De effectieve configuratie wordt in deze volgorde bepaald:
- Package-standaardwaarden in
NextPDF\CodeIgniter\Config\NextPdf. - Een applicatieklasse
Config\NextPdfdie de package-klasse uitbreidt, als die aanwezig is. CodeIgniter laadt deze in plaats van de package-standaard. - Omgevingsoverschrijvingen die door
BaseConfigworden toegepast, met als sleutel de korte klassenaam in kleine lettersnextpdf(geneste sleutels met punten of de volledig gekwalificeerde klassevorm).
Het config-extensiebestand van de applicatie declareert één klasse en heeft geen neveneffecten. Daarmee blijft het in lijn met de verwachting van PSR-1 dat een bestand ofwel symbolen declareert ofwel logica met neveneffecten uitvoert, maar niet beide (PSR-1 §x1.x1.p3). Het helperbestand is de bewuste tegenhanger met neveneffecten. Het declareert de globale functies pdf() en pdf_document(), en elke functie wordt beschermd door een function_exists-controle, zodat dubbel laden veilig is.
Diagnostiek
Sectie met titel “Diagnostiek”composer dump-autoload— bouwt na een upgrade de PSR-4-map en defiles-autoload-lijst opnieuw op.- Om discovery snel te testen, gebruik je een controller die
Services::pdfDocument(false)aanroept en verifieert dat eenDocumentwordt geretourneerd. - Inspecteer
vendor/composer/autoload_files.phpom te bevestigen dat het helperbestand is geregistreerd. - Zie /integrations/codeigniter/troubleshooting/ voor de koppeling van fout naar oorzaak.
Conformiteit
Sectie met titel “Conformiteit”- Een volledig gekwalificeerde klassenaam vereist een top-level namespace (PSR-4 Autoloader §x1.x2.p5).
- Koppeling van namespace-prefix aan het class-path van de basismap (PSR-4 Autoloader §x1.x3).
- Een bestand declareert symbolen of veroorzaakt neveneffecten — het ontwerp van het helperbestand (PSR-1 Basic Coding Standard §x1.x1.p3).
Zie ook
Sectie met titel “Zie ook”- /integrations/codeigniter/integration/ — de bedradingsreferentie en de smoke test.
- /integrations/codeigniter/install/ — discovery installeren en verifiëren.
- /integrations/codeigniter/overview/ — het volledige application programming interface (API)-oppervlak.
- /integrations/codeigniter/troubleshooting/ — faalmodi van discovery.