자동로딩은 PHP에서 클래스를 로드할 디렉토리 또는 여러 디렉토리를 지정하는 개념입니다. 이는 require 또는 include를 사용하여 클래스를 로드하는 것보다 훨씬 유익합니다. 또한 Composer 패키지를 사용하는 데 필요합니다.
require
include
기본적으로 Flight 클래스는 Composer를 통해 자동으로 자동로드됩니다. 그러나 자체 클래스를 자동으로로드하려면 Flight::path() 메서드를 사용하여 클래스를 로드할 디렉토리를 지정할 수 있습니다.
Flight
Flight::path()
다음과 같은 디렉터리 트리가 있다고 가정해 봅시다:
# 예제 경로 /home/user/project/my-flight-project/ ├── app │ ├── cache │ ├── config │ ├── controllers - 이 프로젝트의 컨트롤러가 들어 있는 디렉토리 │ ├── translations │ ├── UTILS - 이 애플리케이션을 위한 클래스가 들어 있는 디렉토리 (예를 들어 나중에 사용하기 위해 모두 대문자로 표시되어 있습니다) │ └── views └── public └── css └── js └── index.php
이는 이 설명서 사이트의 파일 구조와 동일한 것을 알 수 있습니다.
다음과 같이 각 디렉토리를 로드할 수 있습니다:
/** * public/index.php */ // 오토로더에 경로 추가 Flight::path(__DIR__.'/../app/controllers/'); Flight::path(__DIR__.'/../app/utils/'); /** * app/controllers/MyController.php */ // 네임스페이스가 필요하지 않음 // 모든 자동로드 클래스는 파스칼 케이스(각 단어의 첫 글자가 대문자이고 공백이 없는)로 권장합니다 // 3.7.2 버전부터 Loader::setV2ClassLoading(false);를 실행하여 클래스 이름에 Pascal_Snake_Case를 사용할 수 있습니다. class MyController { public function index() { // 무언가 수행 } }
네임스페이스가 있는 경우 이 구현이 매우 쉬워집니다. 애플리케이션의 루트 디렉토리(문서 루트 또는 public/ 폴더가 아님)를 지정하기 위해 Flight::path() 메서드를 사용해야 합니다.
public/
/** * public/index.php */ // 오토로더에 경로 추가 Flight::path(__DIR__.'/../');
이제 컨트롤러가 이와 같이 보일 수 있습니다. 아래 예제를 확인하되 중요한 정보를 위해 주석을 주의깊게 읽어주십시오.
/** * app/controllers/MyController.php */ // 네임스페이스가 필요합니다 // 네임스페이스는 디렉토리 구조와 같아야 합니다 // 네임스페이스는 디렉토리 구조와 동일한 케이스를 따라야 합니다 // 네임스페이스와 디렉토리에는 밑줄을 사용할 수 없습니다 (Loader::setV2ClassLoading(false)가 설정된 경우를 제외하고) namespace app\controllers; // 모든 자동로드 클래스는 파스칼 케이스로 권장됩니다 // 3.7.2 버전부터 Loader::setV2ClassLoading(false);를 실행하여 클래스 이름에 Pascal_Snake_Case를 사용할 수 있습니다. class MyController { public function index() { // 무언가 수행 } }
그리고 utils 디렉토리에 있는 클래스를 자동으로로드하려면 기본적으로 다음을 수행하면 됩니다:
/** * app/UTILS/ArrayHelperUtil.php */ // 네임스페이스는 디렉토리 구조 및 케이스와 일치해야 합니다 (UTILS 디렉토리가 위의 파일 트리처럼 대문자로 되어 있음에 유의하세요) namespace app\UTILS; class ArrayHelperUtil { public function changeArrayCase(array $array) { // 무언가 수행 } }
3.7.2 버전부터 Loader::setV2ClassLoading(false);를 실행하여 클래스 이름에 밑줄을 사용할 수 있습니다. 이를 통해 클래스 이름에 밑줄을 사용할 수 있지만 권장되지는 않지만 필요한 경우 사용할 수 있습니다.
Loader::setV2ClassLoading(false);
/** * public/index.php */ // 오토로더에 경로 추가 Flight::path(__DIR__.'/../app/controllers/'); Flight::path(__DIR__.'/../app/utils/'); Loader::setV2ClassLoading(false); /** * app/controllers/My_Controller.php */ // 네임스페이스가 필요하지 않음 class My_Controller { public function index() { // 무언가 수행 } }