콘텐츠로 이동

NextPDF CodeIgniter 부트와 디스커버리

CodeIgniter 4는 Composer 패키지 디스커버리를 통해 패키지의 Services 클래스, 헬퍼 함수, 레지스트라를 자동으로 찾습니다. 이 페이지에서는 정확한 순서와 이를 제어하는 구성을 설명합니다.

CodeIgniter Services 디스커버리의 작동 방식

섹션 제목: “CodeIgniter Services 디스커버리의 작동 방식”

CodeIgniter 4는 디스커버리로 찾은 모든 Config\Services 클래스를 검사하여 요청된 서비스와 이름이 일치하는 정적 메서드를 찾고 서비스를 해석합니다. 따라서 애플리케이션이 service('pdf')를 호출하면 프레임워크는 발견된 첫 번째 Services 클래스 중 pdf 메서드를 선언한 클래스를 찾아 호출합니다.

디스커버리는 Config\Modules에 의해 제어됩니다.

  • $enabled — 자동 디스커버리의 기본 스위치입니다. 기본값은 true입니다.
  • $discoverInComposer — 디스커버리를 Composer 패키지 전반으로 확장합니다. 기본값은 true입니다. 이 플래그를 통해 프레임워크가 nextpdf/codeigniter를 찾을 수 있습니다.
  • $composerPackages — Composer 패키지 집합에 대한 선택적 only / exclude 필터입니다.
  • $aliases — 디스커버리에 참여하는 요소 유형입니다. 프레임워크 기본값에는 servicesregistrars가 포함되며, 이 패키지는 둘 다 사용합니다.

패키지 클래스는 NextPDF\CodeIgniter\Config\Services입니다. Composer는 PSR-4 접두사 NextPDF\CodeIgniter\src/CodeIgniter/에 매핑합니다. 정규화된 클래스 이름에는 최상위 네임스페이스가 있어야 합니다(PSR-4 §x1.x2.p5, 규범적 MUST). 네임스페이스 접두사가 베이스 디렉터리에 매핑되므로 클래스는 해당 파일로 해석됩니다(PSR-4 §x1.x3).

  1. Composer 오토로드. Composer는 PSR-4 맵과 files 오토로드 항목을 등록합니다. 헬퍼 파일 src/CodeIgniter/Helpers/pdf_helper.php가 여기서 로드됩니다.
  2. 프레임워크 부트스트랩. CodeIgniter는 Config\Modules를 읽습니다. 디스커버리가 활성화되어 있으면 Composer 패키지 전반에서 발견된 요소 목록을 구성합니다.
  3. 레지스트라 디스커버리. 프레임워크는 Registrar 클래스를 수집합니다. 패키지의 Registrar::Autoload()pdf 헬퍼를 CodeIgniter의 헬퍼 로더에 알립니다.
  4. 첫 호출 시 서비스 해석. 서비스 팩토리는 지연 평가됩니다. 첫 번째 service('pdf') 또는 Services::pdf() 호출이 팩토리를 실행합니다. 공유 서비스는 프로세스 동안 로케이터에 캐시됩니다.

CodeIgniter 4에는 PSR-11 컨테이너가 없습니다. 여기서 “바인딩”은 Services 클래스의 정적 팩토리 메서드를 뜻합니다. 각 메서드는 bool $getShared 매개변수를 받습니다.

서비스기본 공유 여부비고
fontRegistry워밍 후 잠깁니다.
imageRegistry제한된 LRU 캐시입니다.
documentFactory무상태입니다.
pdfDocument아니요호출마다 새로 생성됩니다.
pdf아니요호출마다 새로 생성됩니다.
tsaClientnull입니다(TSA URL이 없을 때).
pdfSigner아니요null입니다(서명이 비활성화된 경우).

공유 인스턴스는 프로세스 동안 CodeIgniter의 BaseService 인스턴스 캐시에 저장됩니다. 프레임워크 테스트 하니스는 BaseService::reset()을 통해 해당 캐시를 비우며, 패키지 기능 테스트는 케이스 사이에 이 리셋이 수행된다고 가정합니다.

유효 구성은 다음 순서로 해석됩니다.

  1. 패키지 기본값은 NextPDF\CodeIgniter\Config\NextPdf에 있습니다.
  2. 패키지 클래스를 확장하는 애플리케이션 클래스 Config\NextPdf가 있는 경우입니다. CodeIgniter는 패키지 기본값 대신 이를 로드합니다.
  3. 환경 재정의는 BaseConfig가 적용하며, 소문자 짧은 클래스 이름 nextpdf를 키로 사용합니다(점으로 구분된 중첩 키 또는 정규화된 클래스 형식).

애플리케이션 구성 확장 파일은 하나의 클래스만 선언하며 부수 효과를 실행하지 않습니다. 이는 파일이 심볼을 선언하거나 부수 효과가 있는 로직을 실행하되 둘 다 하지는 않는다는 PSR-1의 기대에 부합합니다(PSR-1 §x1.x1.p3). 헬퍼 파일은 의도적으로 부수 효과를 일으키는 반대쪽 사례입니다. 이 파일은 전역 pdf()pdf_document() 함수를 선언하며, 각 함수는 function_exists 검사로 보호되므로 이중 로드되어도 안전합니다.

  • composer dump-autoload — 업그레이드 후 PSR-4 맵과 files 오토로드 목록을 다시 빌드합니다.
  • 가장 빠른 디스커버리 프로브는 Services::pdfDocument(false)를 호출하고 Document 반환을 확인하는 컨트롤러입니다.
  • 헬퍼 파일이 등록되었는지 확인하려면 vendor/composer/autoload_files.php를 검사하십시오.
  • 실패 원인 매핑은 /integrations/codeigniter/troubleshooting/를 참고하십시오.
  • 정규화된 클래스 이름에는 최상위 네임스페이스가 필요합니다(PSR-4 Autoloader §x1.x2.p5).
  • 네임스페이스 접두사에서 베이스 디렉터리로 이어지는 클래스 경로 매핑입니다(PSR-4 Autoloader §x1.x3).
  • 파일은 심볼을 선언하거나 부수 효과를 일으킵니다 — 헬퍼 파일 설계를 설명합니다(PSR-1 Basic Coding Standard §x1.x1.p3).
  • /integrations/codeigniter/integration/ — 배선 레퍼런스와 스모크 테스트입니다.
  • /integrations/codeigniter/install/ — 설치와 디스커버리 확인입니다.
  • /integrations/codeigniter/overview/ — 전체 API 표면입니다.
  • /integrations/codeigniter/troubleshooting/ — 디스커버리 실패 모드입니다.