CI4

[코드이그나이터] configuration 파일

으누아빠 2020. 9. 2. 17:08
반응형

config 파일

출처:
http://ci4doc.cikorea.net/general/configuration.html

configuration 파일은 수많은 파라미터 와 초기 설정값을 정의 하는데 이용

하나의 파일안에 모든 설정파일들을 포함시키는 형태가 아님

설정 항목이 필요로 하는 클래스 들은 해당 클래스명 과 같은 config 파일들을 가지고 있음

CI3의 경우 해당 파일들은 변수들의 집합형태였지만 CI4에서는 클래스 형태로 변경됨

구성 파일은 /app/Config 폴더에 위치

설정파일 호출

new 키워드를 이용하여 호출

// 자신이 직접 설정객체를 생성 하는 방법
$config = new \Config\Pager();

config() 함수를 이용하여 호출

// 네임스페이스가 있는 설정 class 에 접근하는 방법
$config = config( 'Config\\Pager' );

//config() 함수를 이용해 새로운 객체를 만드는 방법
$config = config('Pager', false);

설정파일 생성

기본 파일 위치는 /app/Config 에 위치

CodeIgniter\Config\BaseConfig를 확정해야함

app\Config\CustomVariable.php

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class CustomVariable extends BaseConfig
{
    public $siteName = 'My CI4 framewark';
    public $siteEmail = 'webmaster@ilgram.com';
}
app\Controllers\Home.php

<?php

namespace App\Controllers;

use App\ThirdParty\Greetings;

class Home extends BaseController
{
    public function index()
    {
        //설정파일 호출
        $config = new \Config\CustomVariable();
        //$config = config('CustomVariable');

        echo $config->siteName;
        echo $config->siteEmail;
    }
}

환경변수

암호, API 키 또는 개인 데이터와 같은 기타 중요한 데이터에 환경 변수를 사용

.env 파일을 이용

CI4 설치시 env 파일이 최상단에 존재하며 해당 이름을 .env 또는 .env로 본사본을 만들어 사용

.git 사용시 .gitignore에 추가하여 중요한 정보가 노출되지 않도록 해야함

.env 파일에 =로 구분된 이름/값 쌍의 단순한 모음으로 저장

S3_BUCKET = dotenv
SECRET_KEY = super_secret_key
CI_ENVIRONMENT = development

// getenv(), $_SERVER, $_ENV를 이용하여 설정값 호출
$s3_bucket = getenv('S3_BUCKET');
$s3_bucket = $_ENV['S3_BUCKET'];
$s3_bucket = $_SERVER['S3_BUCKET'];

.env 파일에 환경설정 변수가 상단에서 이미 설정되있는경우, 하단에서 다시 선언을 하더라고 해당값이 수정되지 않음

CI_ENVIRONMENT = development
CI_ENVIRONMENT = production

$environment_type = $_SERVER['CI_ENVIRONMENT'];

echo $environment_type //출력: development

중첩변수

이미 지정된 환경변수 재사용 가능

BASE_DIR="/var/webroot/project-root"
CACHE_DIR="${BASE_DIR}/cache"
TMP_DIR="${BASE_DIR}/tmp"

네임스페이스 변수

이름이 같은 환경변수가 여러개 있을수 있기 때문에 이를 구분하기 위해 네임스페이스를 부여 하여 분리 함

구분 접두사.변수명 = 값 형태로 생성

// 네임스페이스 변수 아님
name = "George"
db=my_db

// 네임스페이스 변수
address.city = "Berlin"
address.country = "Germany"
frontend.db = sales
backend.db = admin
BackEnd.db = admin

config 파일과 환경변수

config 파일이 객체화 될때 .env 파일내에 있는 네임스페이스 변수를 고려함

만약 네임스페이스 변수의 구분 접두사가 config 파일의 네임스페이스와 정확하게 일치한다면 네임스페이스 변수의 . 뒷부분이 해당 config 파일의 설정값이 된다. [대소문자 구분]

만약 config 설정값과 환경변수값이 일치할경우 config 설정값은 환경설정값으로 수정된다.

.env
<?php
Config\App.CSRFCookieName  = 'csrf_tutorial_cookie'
// app.CSRFCookieName = csrf_tutorial_cookie 형태로도 처리가 가능함
app\Config\App.php
<?php namespace Config;
...
public $CSRFCookieName = 'csrf_cookie_name';
app\Controllers\Home.php

<?php

namespace App\Controllers;

use App\ThirdParty\Greetings;

class Home extends BaseController
{
    public function index()
    {
        //객체화 시 환경 변수를 확인
        $config = config('App');

        //만약 동일한 정보가 있을경우 환경변수의 값을 config값으로 대체

        echo $config->CSRFCookieName; //출력: csrf_tutorial_cookie
    }
}

환경변수가 네임스페이스 변수로 구성될경우 구분 접두사.변수명 = 값 이지만 만약

구분 접두사.변수명1.변수명2 = 값 형태로 되어 있을경우 해당 네이스페이스 변수는 배열임을 나타냄

$변수명1['변수명2'] = 값;