파일 오토로드(autoload)

모든 어플리케이션은 다른 위치에 있는 많은 수의 클래스로 구성되어 있습니다. 프레임워크는 핵심 기능을 위한 클래스를 제공합니다. 어플리케이션이 작동하도록 하기 위해 여러 라이브러리, 모델 및 기타 엔티티가 있을 것입니다. 프로젝트에서 사용하는 타사(third-party) 클래스가 있을 수도 있습니다. 모든 파일이 어디에 있는지 추적하는 것과 그 위치를 일련의 requires()로 하드코딩하는 것은 엄청난 골칫거리이며 오류가 발생하기 쉽습니다. 그래서 오토로더가 필요합니다.

CodeIgniter는 구성이 거의 없이 사용할 수 있는 매우 유연한 오토로더를 제공합니다. 별도의 설정 없이 PSR-4 오토로더 디렉토리 구조를 준수하는 개별 네임스페이스에서 클래스를 찾을 수 있습니다.

오토로더는 그 자체로도 훌륭하게 작동하지만 필요하다면 Composer와 같은 다른 오토로더 또는 사용자 정의 오토로더와 함께 작동 할 수 있습니다. 그것들은 모두 spl_autoload_register를 통해 등록 되기 때문에, 순서대로 작동하며 서로의 방식을 방해하지 않습니다.

오토로더는 프레임워크 실행 초기에 spl_autoload_register()에 등록되어 항상 활성화됩니다.

오토로더 구성

초기 설정은 app/Config/Autoload.php에서 이루어집니다. 이 파일에는 두 개의 기본 배열이 포함되어 있습니다.: 하나는 클래스맵을 위한 것이고, 다른 하나는 PSR-4 호환 네임스페이스를 위한 것입니다.

네임스페이스

클래스를 구성하는데 권장되는 방법은 어플리케이션 파일의 네임스페이스를 하나 이상 만드는 것입니다. 이것은 비즈니스 로직 관련 클래스, 엔티티 클래스등에 가장 중요합니다. 구성 파일의 psr4 배열을 사용하면 네임스페이스를 해당 클래스가 있는 디렉토리에 매핑 할 수 있습니다.

<?php

$psr4 = [
    'App'         => APPPATH,
    'CodeIgniter' => SYSTEMPATH,
];

각 배열 행의 키는 네임스페이스이며, 슬래시(/)가 필요하지 않습니다. 값은 클래스를 찾을 수 있는 디렉토리의 위치이며, 뒤에 슬래시(/)가 있어야 합니다.

Note

park namespaces 명령으로 네임스페이스 구성을 확인할 수 있습니다.

> php spark namespaces

기본적으로 어플리케이션 폴더는 네임스페이스 App로 되어 있습니다. 어플리케이션 디렉토리의 컨트롤러, 라이브러리 또는 모델의 네임스페이스를 지정하지 않을 경우 App 네임스페이스 아래 위치합니다. app/Config/Constants.php 파일의 APP_NAMESPACE를 수정하면 이 네임스페이스를 변경할 수 있습니다.

<?php

define('APP_NAMESPACE', 'App');

이렇게 할 경우 현재 네임스페이스를 참조하는 기존 파일을 모두 수정해야 합니다.

Important

구성(config) 파일의 네임스페이스는 App\Config가 아니라 Config입니다. 따라서 어플리케이션 네임스페이스가 변경된 경우에도 코어 시스템 파일은 항상 찾을 수 있습니다.

클래스 맵

CodeIgniter의 클래스 맵은 파일 시스템의 충돌을 피하고자 is_file()을 사용하므로 시스템의 성능을 최대로 끌어올릴 수 있습니다. 클래스 맵을 사용하여 네임스페이스가 없는 타사 라이브러리에 연결할 수 있습니다.

<?php

$classmap = [
    'Markdown' => APPPATH . 'third_party/markdown.php',
];

각 행의 키는 찾으려는 클래스의 이름입니다. 값은 위치를 지정하는 경로입니다.

Composer 지원

Composer 지원은 기본적으로 자동 초기화됩니다. 기본적으로 ROOTPATH . 'vendor/autoload.php'에서 Composer의 오토로드 파일을 찾습니다. 해당 파일의 위치를 ​​변경해야 한다면 app/Config/Constants.php에 정의된 값을 수정합니다.

Note

CodeIgniter와 Composer에 동일한 네임스페이스가 정의되어 있다면 CodeIgniter의 오토로더에게 우선권이 부여됩니다.