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— 디스커버리에 참여하는 요소 유형입니다. 프레임워크 기본값에는services와registrars가 포함되며, 이 패키지는 둘 다 사용합니다.
패키지 클래스는 NextPDF\CodeIgniter\Config\Services입니다. Composer는 PSR-4 접두사 NextPDF\CodeIgniter\를 src/CodeIgniter/에 매핑합니다. 정규화된 클래스 이름에는 최상위 네임스페이스가 있어야 합니다(PSR-4 §x1.x2.p5, 규범적 MUST). 네임스페이스 접두사가 베이스 디렉터리에 매핑되므로 클래스는 해당 파일로 해석됩니다(PSR-4 §x1.x3).
부트 시퀀스
섹션 제목: “부트 시퀀스”- Composer 오토로드. Composer는 PSR-4 맵과
files오토로드 항목을 등록합니다. 헬퍼 파일src/CodeIgniter/Helpers/pdf_helper.php가 여기서 로드됩니다. - 프레임워크 부트스트랩. CodeIgniter는
Config\Modules를 읽습니다. 디스커버리가 활성화되어 있으면 Composer 패키지 전반에서 발견된 요소 목록을 구성합니다. - 레지스트라 디스커버리. 프레임워크는
Registrar클래스를 수집합니다. 패키지의Registrar::Autoload()는pdf헬퍼를 CodeIgniter의 헬퍼 로더에 알립니다. - 첫 호출 시 서비스 해석. 서비스 팩토리는 지연 평가됩니다. 첫 번째
service('pdf')또는Services::pdf()호출이 팩토리를 실행합니다. 공유 서비스는 프로세스 동안 로케이터에 캐시됩니다.
컨테이너 바인딩
섹션 제목: “컨테이너 바인딩”CodeIgniter 4에는 PSR-11 컨테이너가 없습니다. 여기서 “바인딩”은 Services 클래스의 정적 팩토리 메서드를 뜻합니다. 각 메서드는 bool $getShared 매개변수를 받습니다.
| 서비스 | 기본 공유 여부 | 비고 |
|---|---|---|
fontRegistry | 예 | 워밍 후 잠깁니다. |
imageRegistry | 예 | 제한된 LRU 캐시입니다. |
documentFactory | 예 | 무상태입니다. |
pdfDocument | 아니요 | 호출마다 새로 생성됩니다. |
pdf | 아니요 | 호출마다 새로 생성됩니다. |
tsaClient | 예 | null입니다(TSA URL이 없을 때). |
pdfSigner | 아니요 | null입니다(서명이 비활성화된 경우). |
공유 인스턴스는 프로세스 동안 CodeIgniter의 BaseService 인스턴스 캐시에 저장됩니다. 프레임워크 테스트 하니스는 BaseService::reset()을 통해 해당 캐시를 비우며, 패키지 기능 테스트는 케이스 사이에 이 리셋이 수행된다고 가정합니다.
구성 해석 순서
섹션 제목: “구성 해석 순서”유효 구성은 다음 순서로 해석됩니다.
- 패키지 기본값은
NextPDF\CodeIgniter\Config\NextPdf에 있습니다. - 패키지 클래스를 확장하는 애플리케이션 클래스
Config\NextPdf가 있는 경우입니다. CodeIgniter는 패키지 기본값 대신 이를 로드합니다. - 환경 재정의는
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/ — 디스커버리 실패 모드입니다.