Ga naar inhoud

NextPDF CodeIgniter-boot en -discovery

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.

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. Standaard true.
  • $discoverInComposer — breidt discovery uit naar Composer-packages. Standaard true. Met deze vlag kan het framework nextpdf/codeigniter vinden.
  • $composerPackages — een optioneel only- / exclude-filter voor de set Composer-packages.
  • $aliases — de elementtypen die deelnemen aan discovery. De standaardinstelling van het framework bevat services en registrars, 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).

  1. Composer-autoload. Composer registreert de PSR-4-map en de files-autoload-vermeldingen. Op dit punt laadt Composer het helperbestand src/CodeIgniter/Helpers/pdf_helper.php.
  2. Framework-bootstrap. CodeIgniter leest Config\Modules. Wanneer discovery is ingeschakeld, bouwt het framework de lijst met ontdekte elementen op voor alle Composer-packages.
  3. Registrar-discovery. Het framework verzamelt Registrar-klassen. De Registrar::Autoload() van het package maakt de pdf-helper bekend bij de helper-loader van CodeIgniter.
  4. Service-resolutie bij de eerste aanroep. Service-factories zijn lazy. De eerste aanroep van service('pdf') of Services::pdf() voert de factory uit. Gedeelde services worden voor de duur van het proces in de cache van de locator bewaard.

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:

ServiceStandaard gedeeldOpmerkingen
fontRegistryjaVoorverwarmd en daarna vergrendeld.
imageRegistryjaBegrensde least recently used (LRU)-cache.
documentFactoryjaStateless.
pdfDocumentneeVers per aanroep.
pdfneeVers per aanroep.
tsaClientjanull wanneer er geen Time-Stamp Authority (TSA)-URL is geconfigureerd.
pdfSignerneenull 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.

De effectieve configuratie wordt in deze volgorde bepaald:

  1. Package-standaardwaarden in NextPDF\CodeIgniter\Config\NextPdf.
  2. Een applicatieklasse Config\NextPdf die de package-klasse uitbreidt, als die aanwezig is. CodeIgniter laadt deze in plaats van de package-standaard.
  3. Omgevingsoverschrijvingen die door BaseConfig worden toegepast, met als sleutel de korte klassenaam in kleine letters nextpdf (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.

  • composer dump-autoload — bouwt na een upgrade de PSR-4-map en de files-autoload-lijst opnieuw op.
  • Om discovery snel te testen, gebruik je een controller die Services::pdfDocument(false) aanroept en verifieert dat een Document wordt geretourneerd.
  • Inspecteer vendor/composer/autoload_files.php om te bevestigen dat het helperbestand is geregistreerd.
  • Zie /integrations/codeigniter/troubleshooting/ voor de koppeling van fout naar oorzaak.
  • 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).
  • /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.