Ga naar inhoud

NextPDF Cloudflare: boot en discovery

De brug bevat geen eigen service provider, bundle of auto-discovery-hook. Het pakket bestaat uit een set final classes met expliciete constructors. In deze context betekent “discovery” dat je de samenwerkende objecten kiest die je injecteert en ze bindt in de container van je framework. Deze pagina beschrijft die bedrading en introduceert geen registratiemechanisme dat het pakket niet heeft.

Je construeert CloudflareHtmlRenderer; je ontdekt deze niet. De afhankelijkheden ervan zijn PHP Standard Recommendation (PSR)-contracten: PSR-18, PSR-17 en PSR-3, plus de eigen config- en contracttypen van het pakket. Elk framework dat die samenwerkende objecten kan opbouwen, kan de renderer opbouwen. Het pakket is uitsluitend afhankelijk van PSR-contracten; de test tests/Unit/Architecture/PsrConformanceTest.php bevestigt dat geen enkele concrete client aan de renderer is gekoppeld. Je host-applicatie kan de bestaande HTTP-client-binding ongewijzigd hergebruiken. De NextPDF-adapters voor Laravel, Symfony en CodeIgniter hergebruiken diezelfde PSR-18-binding. Dit pakket levert geen eigen framework-pakket mee.

Resolve de samenwerkende objecten in deze volgorde, in lijn met de constructor van CloudflareHtmlRenderer:

  1. Resolve de PSR-18 ClientInterface uit de bestaande HTTP-client-binding van de applicatie.
  2. Resolve de PSR-17 RequestFactoryInterface en StreamFactoryInterface; resolve daarnaast ResponseFactoryInterface wanneer je het vastgezette cURL-transport wilt gebruiken.
  3. Bouw een CloudflareRendererConfig op uit de geresolvede configuratie (zie ‘Configuratie-resolutievolgorde’).
  4. Resolve optioneel een PSR-3 LoggerInterface, een LocalRendererFactoryInterface en een expliciete HtmlSecurityPolicyInterface.
  5. Construeer CloudflareHtmlRenderer met deze samenwerkende objecten.

Geen van deze stappen maakt contact met het netwerk. De eerste netwerkinteractie vindt plaats wanneer je render() of isAvailable() aanroept.

Een representatieve binding (framework-agnostische pseudocode):

<?php
declare(strict_types=1);
use NextPDF\Cloudflare\CloudflareHtmlRenderer;
use NextPDF\Cloudflare\CloudflareRendererConfig;
use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\RequestFactoryInterface;
use Psr\Http\Message\ResponseFactoryInterface;
use Psr\Http\Message\StreamFactoryInterface;
use Psr\Log\LoggerInterface;
$container->singleton(CloudflareHtmlRenderer::class, function ($c) {
return new CloudflareHtmlRenderer(
config: CloudflareRendererConfig::fromArray($c->get('config')['cloudflare']),
httpClient: $c->get(ClientInterface::class),
requestFactory: $c->get(RequestFactoryInterface::class),
streamFactory: $c->get(StreamFactoryInterface::class),
logger: $c->get(LoggerInterface::class),
responseFactory: $c->get(ResponseFactoryInterface::class),
);
});

Het pakket leest zelf geen omgevingsvariabelen. Het accepteert een volledig opgebouwde CloudflareRendererConfig. Resolve de configuratie in de host-applicatie in deze volgorde: eerst omgevingsvariabelen, daarna de gepubliceerde config of framework-config, en tot slot de standaardwaarden van het pakket die in de constructor zijn ingebakken (gedocumenteerd in /integrations/cloudflare/configuration/). CloudflareRendererConfig::fromArray() past de standaardwaarden van de constructor toe op elke ontbrekende of onjuist getypeerde sleutel, zodat een gedeeltelijke config-array voorspelbaar terugvalt in plaats van te falen.

CloudflareRendererConfig::isValid() is het signaal tijdens het booten. Het is een pure controle of zowel workerUrl als apiToken niet leeg zijn en voert geen netwerkaanroep uit, zodat je het als deploy-gate kunt gebruiken. Het runtime-signaal is CloudflareHtmlRenderer::isAvailable(), een geauthenticeerde HTTP HEAD die true retourneert voor een status onder 500 en anders false (zonder ooit een exception te gooien), zodat je het als readiness-probe kunt gebruiken. Een geslaagde probe is een indicatie, geen garantie: de daaropvolgende POST kan alsnog mislukken.

  • /integrations/cloudflare/integration/ — de volledige stapsgewijze integratiehandleiding.
  • /integrations/cloudflare/overview/ — wat de brug is en welke grens die overschrijdt.
  • /integrations/cloudflare/configuration/ — elk veld en elke standaardwaarde.
  • /integrations/cloudflare/security-and-operations/ — wanneer het vastgezette transport wordt geactiveerd.