Przejdź do głównej zawartości

NextPDF — uruchamianie i wykrywanie w CodeIgniter

CodeIgniter 4 wykrywa klasę Services pakietu, jego funkcje pomocnicze i rejestrator za pośrednictwem mechanizmu wykrywania pakietów Composer. Ta strona wyjaśnia tę sekwencję oraz konfigurację, która nią steruje.

CodeIgniter 4 rozwiązuje usługę, przeszukując wszystkie wykryte klasy Config\Services pod kątem metody statycznej odpowiadającej żądanej nazwie usługi. Gdy aplikacja wywołuje service('pdf'), framework znajduje pierwszą wykrytą klasę Services, która deklaruje metodę pdf, i ją wywołuje.

Wykrywaniem steruje Config\Modules:

  • $enabled — główny przełącznik automatycznego wykrywania. Domyślnie true.
  • $discoverInComposer — rozszerza wykrywanie na pakiety Composer. Domyślnie true. Ta flaga pozwala frameworkowi znaleźć nextpdf/codeigniter.
  • $composerPackages — opcjonalny filtr only / exclude dla zestawu pakietów Composer.
  • $aliases — typy elementów uczestniczących w wykrywaniu. Domyślnie framework uwzględnia services oraz registrars, a ten pakiet korzysta z obu.

Klasa pakietu to NextPDF\CodeIgniter\Config\Services. Composer mapuje prefiks PHP Standards Recommendation 4 (PSR-4) NextPDF\CodeIgniter\ na src/CodeIgniter/. W pełni kwalifikowana nazwa klasy musi zawierać przestrzeń nazw najwyższego poziomu (PSR-4 §x1.x2.p5, modalność MUST). Prefiks przestrzeni nazw jest mapowany na katalog bazowy, więc klasa jest rozwiązywana do właściwego pliku (PSR-4 §x1.x3).

  1. Automatyczne ładowanie Composer. Composer rejestruje mapę PSR-4 oraz wpisy automatycznego ładowania files. Na tym etapie ładuje plik pomocniczy src/CodeIgniter/Helpers/pdf_helper.php.
  2. Inicjalizacja frameworka. CodeIgniter odczytuje Config\Modules. Gdy wykrywanie jest włączone, buduje listę wykrytych elementów obejmującą pakiety Composer.
  3. Wykrywanie rejestratora. Framework zbiera klasy Registrar. Metoda Registrar::Autoload() pakietu udostępnia funkcję pomocniczą pdf loaderowi funkcji pomocniczych CodeIgnitera.
  4. Rozwiązywanie usługi przy pierwszym wywołaniu. Fabryki usług są leniwe. Pierwsze wywołanie service('pdf') lub Services::pdf() uruchamia fabrykę. Współdzielone usługi są buforowane przez lokalizator na czas trwania procesu.

CodeIgniter 4 nie udostępnia kontenera PSR-11. Zamiast tego rolę powiązań pełnią statyczne metody fabryczne klasy Services. Każda metoda przyjmuje parametr bool $getShared:

UsługaDomyślnie współdzielonaUwagi
fontRegistrytakRozgrzewana, a następnie blokowana.
imageRegistrytakBufor ograniczony metodą najdawniej używanych (LRU).
documentFactorytakBezstanowa.
pdfDocumentnieNowa przy każdym wywołaniu.
pdfnieNowa przy każdym wywołaniu.
tsaClienttaknull, gdy nie skonfigurowano adresu URL urzędu znaczników czasu (TSA).
pdfSignernienull, gdy podpisywanie jest wyłączone.

Współdzielone instancje trafiają do bufora instancji BaseService CodeIgnitera na czas trwania procesu. Środowisko testowe frameworka czyści ten bufor za pomocą BaseService::reset(), a testy funkcjonalne pakietu korzystają z tego resetowania między przypadkami.

Konfiguracja wynikowa jest ustalana w następującej kolejności:

  1. Wartości domyślne pakietu w NextPDF\CodeIgniter\Config\NextPdf.
  2. Klasa aplikacji Config\NextPdf, która rozszerza klasę pakietu, jeśli istnieje. CodeIgniter ładuje ją zamiast wartości domyślnej pakietu.
  3. Nadpisania środowiskowe stosowane przez BaseConfig, z kluczami opartymi na krótkiej nazwie klasy pisanej małymi literami nextpdf (klucze zagnieżdżone z kropkami lub w pełni kwalifikowana forma klasy).

Plik rozszerzający konfigurację aplikacji deklaruje jedną klasę i nie ma żadnych efektów ubocznych. Zachowuje więc zgodność z oczekiwaniem PSR-1: plik albo deklaruje symbole, albo wykonuje logikę z efektami ubocznymi, ale nie jedno i drugie (PSR-1 §x1.x1.p3). Plik pomocniczy jest celowym odpowiednikiem z efektami ubocznymi. Deklaruje globalne funkcje pdf() i pdf_document(), a każda z nich jest zabezpieczona sprawdzeniem function_exists, więc podwójne załadowanie jest bezpieczne.

  • composer dump-autoload — odbudowuje mapę PSR-4 oraz listę automatycznego ładowania files po aktualizacji.
  • Aby szybko zweryfikować wykrywanie, użyj kontrolera, który wywołuje Services::pdfDocument(false) i sprawdza, czy zwracany jest obiekt Document.
  • Sprawdź vendor/composer/autoload_files.php, aby potwierdzić, że plik pomocniczy jest zarejestrowany.
  • Zobacz /integrations/codeigniter/troubleshooting/, aby sprawdzić mapowanie awarii na przyczyny.
  • W pełni kwalifikowana nazwa klasy wymaga przestrzeni nazw najwyższego poziomu (PSR-4 Autoloader §x1.x2.p5).
  • Mapowanie prefiksu przestrzeni nazw na ścieżkę klasy w katalogu bazowym (PSR-4 Autoloader §x1.x3).
  • Plik deklaruje symbole albo powoduje efekty uboczne — projekt pliku pomocniczego (PSR-1 Basic Coding Standard §x1.x1.p3).
  • /integrations/codeigniter/integration/ — dokumentacja integracji oraz test dymny.
  • /integrations/codeigniter/install/ — instalacja i weryfikacja wykrywania.
  • /integrations/codeigniter/overview/ — pełny zakres interfejsu programowania aplikacji (API).
  • /integrations/codeigniter/troubleshooting/ — tryby awarii wykrywania.