코드 모듈

CodeIgniter는 재사용 가능한 코드를 작성하는데 도움이 되는 코드 모듈화를 지원합니다. 모듈은 일반적으로 특정 주제를 중심으로 이루어지며, 대규모 어플리케이션내의 미니 어플리케이션으로 생각할 수 있습니다. 컨트롤러, 모델, 뷰, 구성 파일, 헬퍼, 언어 파일 등과 같이 프레임워크내의 모든 표준 파일 형식에 지원됩니다. 모듈은 적거나 많을 수 있습니다.

네이스페이스(Namespaces)

모듈 기능의 핵심 요소는 CodeIgniter가 사용하는 PSR4 호환 자동 로딩에서 비롯됩니다. 어떤 코드든 PSR4 오토로더 및 네임스페이스를 사용할 수 있지만, 모듈을 최대한 활용하는 일차적인 방법은 코드를 네임스페이스로 묶고 app/Config/Autoload.phppsr4 섹션에 추가하는 것입니다.

어플리케이션 간에 재사용할 수 있는 간단한 블로그 모듈을 예로 들어보겠습니다. Acme라는 회사 이름으로 폴더를 만들어 모든 모듈을 그 안에 저장합니다. 우리는 프로젝트 루트의 application 디렉토리와 같은 위치에 이 모듈을 놓도록 하겠습니다.

/acme        // New modules directory
/application
/public
/system
/tests
/writable

app/Config/Autoload.php를 열고 Acme 네임스페이스를 psr4 배열 속성에 추가합니다.

$psr4 = [
    'Config'        => APPPATH . 'Config',
    APP_NAMESPACE   => APPPATH,                // For custom namespace
    'App'           => APPPATH,                // To ensure filters, etc still found,
    'Acme'          => ROOTPATH.'acme'
];

이제 설정되었으므로 Acme 네임스페이스를 통해 acme 폴더 내의 모든 파일을 액세스할 수 있습니다. 이 설정만으로 모듈 작동에 필요한 것의 80%를 처리할 수 있습니다. 여러분은 네임스페이스와 친숙해지고 사용에 익숙해지십시오. 여기에서 정의된 네임스페이스를 통해 여러 파일 형식이 자동으로 검색되므로 모듈 작업이 매우 중요합니다.

모듈 내의 공통 디렉토리 구조는 어플리케이션 폴더의 구조를 모방합니다.

/acme
    /Blog
        /Config
        /Controllers
        /Database
            /Migrations
            /Seeds
        /Helpers
        /Language
            /en
        /Libraries
        /Models
        /Views

물론, 이 구조를 반드시 사용하도록 강요 할 필요는 없으며, 모듈에 가장 적합한 방식으로 조직화하여 필요하지 않은 디렉토리는 제거하고, 엔티티, 인터페이스 또는 저장소 등을 위한 새 디렉토리를 작성합니다.

자동 검색(Discovery)

포함할 파일에 전체 네임스페이스를 지정해야 하는 경우가 많지만, CodeIgniter는 다음과 같은 다양한 파일 형식을 자동으로 검색하여 애플리케이션에 모듈을 통합하도록 구성할 수 있습니다.

이것은 app/Config/Modules.php 파일에 구성되어 있습니다.

자동 검색 시스템은 친숙한 디렉토리/파일을 위해 Config/Autoload.php에 정의된 psr4 네임스페이스를 스캔하여 작동합니다.

위의 acme 네임스페이스에서 파일을 찾을 수 있도록 약간의 조정이 필요합니다: 네임스페이스 내의 각 모듈은 자체 네임스페이스가 정의되어 있어야합니다. AcmeAcmeBlog로 변경됩니다. 모듈 폴더가 정의되면, 검색 프로세스는 다른 어플리케이션인 것처럼 /acme/Blog/Config/Routes.php에서 Routes 파일을 찾습니다.

검색 활성화 / 비활성화

$enabled 클래스 변수를 사용하여, 시스템의 모든 자동 검색을 설정하거나 해제할 수 있습니다. False는 모든 검색을 비활성화하고 성능을 최적화하지만, 모듈의 특수 기능은 무시됩니다.

검색 항목 지정

$activeExplorers 옵션을 사용하면 자동으로 검색할 항목을 지정할 수 있습니다. 항목이 없으면 해당 항목에 대해 자동 검색이 수행되지 않지만 배열의 다른 항목은 계속 검색됩니다.

Composer 패키지 검색

기본적으로 Composer를 통해 설치된 패키지도 검색됩니다. 이를 위해 Composer로 설치된 패키지의 네임스페이스는 PSR4로 되어 있어야 합니다. PSR0 네임스페이스는 감지되지 않습니다.

파일을 찾을 때 Composer의 패키지를 검사하지 않으려면 Config\Modules.php$discoverInComposer 변수를 수정하여 이 기능를 끌 수 있습니다.

public $discoverInComposer = false;

파일 작업

이 섹션에서는 각 파일 형식과 모듈 내에서 파일 형식(컨트롤러, 뷰, 언어 파일 등)을 사용하는 방법을 살펴 봅니다. 이 정보 중 일부는 사용자 가이드의 관련 위치에 자세히 설명되어 있지만, 모든 조각이 어떻게 결합되는지 쉽게 파악할 수 있도록 하였습니다.

라우트

기본적으로 모듈 내에서 라우트가 자동으로 검색됩니다. 위에서 설명한 모듈 구성 파일에서 끌 수 있습니다.

Note

파일이 현재 범위에 포함되므로 $routes 인스턴스가 이미 정의되어 있습니다. 해당 클래스를 재정의하려고 하면 오류가 발생합니다.

컨트롤러

app/Controllers 디렉토리 외부에 작성된 컨트롤러는 URI 감지를 통해 자동으로 라우팅할 수 없으므로 Routes 파일에서 지정해야 합니다.
// Routes.php
$routes->get('blog', 'Acme\Blog\Controllers\Blog::index');

group 라우팅 기능을 사용하면 여기에 필요한 입력양을 줄일수 있습니다.

$routes->group('blog', ['namespace' => 'Acme\Blog\Controllers'], function($routes)
{
    $routes->get('/', 'Blog::index');
});

구성 파일

구성 파일은 특별한 변경이 필요하지 않습니다. 네임스페이스와 클래스를 new 명령을 사용하여 로드합니다.

$config = new \Acme\Blog\Config\Blog();

구성 파일은 항상 사용 가능한 config() 기능을 사용할 때마다 자동으로 감지됩니다.

마이그레이션

마이그레이션 파일은 정의된 네임스페이스내에서 자동으로 검색됩니다. 모든 네임스페이스에서 발견된 모든 마이그레이션은 매번 실행됩니다.

시드(Seeds)

시드 파일은 전체 네임스페이스가 제공된다면 CLI와 다른 시드 파일 내에서 호출할 수 있습니다. CLI를 통하여 호출하는 경우 이중 백 슬래시(\)를 사용해야 합니다.

> php public/index.php migrations seed Acme\\Blog\\Database\\Seeds\\TestPostSeeder

헬퍼

helper() 메서드를 사용하여 Helpers 디렉토리 내에 있는 헬퍼를 자동으로 찾을 수 있습니다.

helper('blog');

언어(Language) 파일

기본 애플리케이션 디렉토리와 동일한 디렉토리 구조를 다른다면 lang() 메서드를 사용하여 언어 파일을 자동으로 찾을 수 있습니다.

라이브러리

라이브러리는 항상 정규화된 클래스 이름으로 인스턴스화되므로 특별한 액세스 방법을 제공하지 않습니다.

$lib = new \Acme\Blog\Libraries\BlogLib();

모델

모델은 항상 정규화된 클래스 이름으로 인스턴스화되므로 특별한 액세스 방법을 제공하지 않습니다.

$model = new \Acme\Blog\Models\PostModel();

문서에 설명된대로 클래스 네임스페이스를 사용하여 뷰를 로드 할 수 있습니다.

echo view('Acme\Blog\Views\index');