NextPDF Laravel-boot en automatische detectie
In een oogopslag
Sectie met titel “In een oogopslag”Laravel detecteert NextPdfServiceProvider automatisch op basis van de composer.json van het package. De provider registreert uitgestelde container-bindings en publiceert het configuratiebestand in een consolecontext. Deze pagina legt uit hoe de detectie werkt en wat de levensduur van elke binding is.
Installeren
Sectie met titel “Installeren”composer require nextpdf/laravelphp artisan vendor:publish --tag=nextpdf-configHoe automatische detectie in Laravel werkt
Sectie met titel “Hoe automatische detectie in Laravel werkt”Het package declareert zijn provider en facade-alias in het extra.laravel-blok van de eigen composer.json:
{ "extra": { "laravel": { "providers": [ "NextPDF\\Laravel\\NextPdfServiceProvider" ], "aliases": { "Pdf": "NextPDF\\Laravel\\Facades\\Pdf" } } }}Bij het uitvoeren van composer require leest Laravel dit blok en registreert daarna de provider en de alias. Handmatige bewerking van config/app.php of bootstrap/providers.php is niet nodig. De array extra.laravel.providers registreert serviceproviders automatisch en extra.laravel.aliases registreert facade-aliassen automatisch (Laravel 12-handleiding voor packageontwikkeling,
https://laravel.com/docs/12.x/packages, geraadpleegd op 2026-05-18).
Bootvolgorde
Sectie met titel “Bootvolgorde”NextPdfServiceProvider implementeert DeferrableProvider en de standaard register()- / boot()-levenscyclus.
register()voegt de packageconfiguratie samen onder de sleutelnextpdf. Vervolgens bindt de methode de container-entries: lettertyperegister, afbeeldingsregister, documentfactory, PHP Standards Recommendation 18 (PSR-18) Hypertext Transfer Protocol (HTTP)-client, timestamp-client, signer, document en e-factuurcontracten. Elke binding is een closure, dus er worden hier geen zware objecten geconstrueerd.boot()controleert of de PHP-extensiesmbstringenzlibgeladen zijn. De methode registreert de publiceerbare configuratie onder de tagnextpdf-configalleen wanneerrunningInConsole()waar is.
Omdat de provider uitgesteld is, draait register() pas wanneer een van de entries wordt opgelost die door provides() worden geretourneerd. Het oplossen van een niet-gerelateerde containersleutel boot NextPDF niet.
Container-bindings en levensduur
Sectie met titel “Container-bindings en levensduur”PHP Standards Recommendation 11 (PSR-11) staat toe dat twee opeenvolgende get()-aanroepen met dezelfde identifier verschillende waarden retourneren, afhankelijk van de bindingstrategie (PSR-11 §1.1.2). De provider vertrouwt bewust op dit gedrag:
| Bindingsleutel | Levensduur | Opmerkingen |
|---|---|---|
FontRegistryInterface (+ alias FontRegistry) | singleton, vergrendeld na warmup | Opgewarmd vanuit preload_fonts; vergrendeld zodat geen enkel verzoek het kan muteren |
ImageRegistry | singleton | Begrensde least recently used (LRU)-cache; de grootte wordt bepaald door image_cache_mb; niet vergrendeld |
DocumentFactoryInterface (+ alias DocumentFactory) | singleton | Stateless; deelt de twee registers |
Psr\Http\Client\ClientInterface | singleton | Client die rekening houdt met request forgery en een curl-client omhult; opgebouwd uit tsa.* |
TsaClient | scoped | null wanneer tsa.url leeg is |
SignerInterface | factory | null wanneer ondertekening is uitgeschakeld of het certificaat leeg is |
PdfDocumentInterface (+ alias nextpdf) | factory | Nieuwe NextPDF\Core\Document per resolve, met standaardmetadata al toegepast |
EmbedderInterface, ValidatorInterface, ProfileInterface, SchematronRunnerInterface | factory | Lost op naar Premium-concretes; geeft een fout bij de eerste resolve zonder nextpdf/premium |
De documentbinding past defaults.creator, defaults.language en, indien niet leeg, defaults.author toe op elk nieuw document. Wanneer pdfa niet null is, schakelt de binding PDF/A in (Premium). Wanneer de sectie artisan aanwezig is en er een Chrome-browserfactoryklasse bestaat, past de binding de Chrome-weergaveconfiguratie toe.
has() op de container accepteert één enkele string-identifier (PSR-11 §1.1.2). De e-factuurcontracten zijn gebonden, dus has() retourneert daarvoor true, zelfs wanneer Premium afwezig is. De ontbrekende concrete geeft pas tijdens constructie een fout.
Automatische detectie uitschakelen
Sectie met titel “Automatische detectie uitschakelen”Voeg het package toe aan de dont-discover-array van de applicatie en registreer de provider vervolgens handmatig:
{ "extra": { "laravel": { "dont-discover": ["nextpdf/laravel"] } }}<?php
declare(strict_types=1);
return [ App\Providers\AppServiceProvider::class, NextPDF\Laravel\NextPdfServiceProvider::class,];Volgorde van configuratieresolutie
Sectie met titel “Volgorde van configuratieresolutie”Elke sleutel wordt in deze volgorde opgelost: omgevingsvariabele → gepubliceerde waarde in config/nextpdf.php → packagestandaard die bij register() wordt samengevoegd. De meeste sleutels accepteren een NEXTPDF_*-naam of een verouderde TCPDF_*-omgevingsnaam. Geef de voorkeur aan NEXTPDF_*.
Diagnostiek
Sectie met titel “Diagnostiek”php artisan package:discover --ansiEen regel die nextpdf/laravel vermeldt, bevestigt de detectie. Omdat de provider uitgesteld is, verschijnen de bindings zelf pas bij de eerste resolve. De detectieregel is het juiste successignaal.
Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- De configuratiepublicatie registreert alleen in een consolecontext, dus een verzoek dat uitsluitend via het web binnenkomt, activeert het nooit. Voer
vendor:publishuit vanuit de command-line interface (CLI). - Naast de sleutels voor het register, de factory, de HTTP-client, de signer, de timestamp en het document bevat
provides()de vier sleutels voor e-factuurcontracten. - Een verse installatie kan inert lijken tot de eerste relevante resolve. Dit is het ontwerp van de uitgestelde provider, geen fout.
Prestaties
Sectie met titel “Prestaties”register() is O(1), omdat het uitsluitend closures aanmaakt. De warmup van het lettertyperegister is O(f) ten opzichte van vooraf geladen lettertypen en draait eenmaal per workerproces. Door de provider uit te stellen blijven de constructiekosten van NextPDF buiten het bootpad van het framework totdat een binding daadwerkelijk wordt gebruikt.
Beveiligingsopmerkingen
Sectie met titel “Beveiligingsopmerkingen”Het uitgestelde ontwerp verkleint het aanvalsoppervlak tijdens het booten. Het vergrendelde lettertyperegister voorkomt dat het ene verzoek de lettertypestatus voor een ander verzoek wijzigt in langlevende workers. Voor volledige dekking van dreigingen, zie /integrations/laravel/security-and-operations/.
Conformiteit
Sectie met titel “Conformiteit”| Bewering | Bron | Clausule | reference_id |
|---|---|---|---|
| Opeenvolgende resoluties kunnen verschillen afhankelijk van de bindingstrategie | PSR-11 Container | §1.1.2 | |
has() neemt één string-identifier | PSR-11 Container | §1.1.2 |
De officiële Laravel 12-package-documentatie bevestigt de namen van de Laravel-detectiesleutels (https://laravel.com/docs/12.x/packages, geraadpleegd op 2026-05-18).
Commerciële context
Sectie met titel “Commerciële context”Premium-concretes lossen op via dezelfde uitgestelde bindingsleutels. Deze optionele Enterprise-functionaliteit vereist geen codewijziging in het Core-package dat hier wordt beschreven. Zie https://nextpdf.dev/get-license/?intent=laravel-signing.
Zie ook
Sectie met titel “Zie ook”- /integrations/laravel/install/ — installeren en publiceren
- /integrations/laravel/overview/ — packagearchitectuur
- /integrations/laravel/integration/ — end-to-end wiring-handleiding
- /integrations/laravel/configuration/ — elke configuratiesleutel