환경설정


환경설정은 프로그램이 유연하게 동작을 할 수 있도록 만들는 아이디어 방법 입니다. 이러한 설정값들을 파일 또는 외부 데이터베이스에 저장을 할 수도 있습니다.

데이터를 파일형태로 직렬화 하여 저장을 할 수 있습니다. 만일 설정값들이 고정된 값이라면, 파일로 저장하여 처리하는 방식도 좋습니다. 데이터 직렬화를 통하여 파일을 저장하여 처리하는 방식은 여러가지가 있습니다.

  • php array
  • ini
  • YAML

지니는 여러 데이터 직렬화 파일을 읽어 처리를 할 수 있습니다.

페키지


지니 PHP는 저장된 다양한 직렬데이터를 처리 할 수 있도록 패키지를 같이 제공합니다. 이 페키지는 기본적으로 탑제되어 있습니다.

만일 기본설치가 되어 있지 않은 경우에는 다음과 같이 설치를 할 수 있습니다.

composer require jiny/config

설정파일들


환경 설정파일은 /conf 폴더 안에 생성하여 만들 수 있습니다. 이 폴더안에 yaml, ini, json 파일들을 생성하면 됩니다.

환경설정 값이 저장된 /conf 폴더는 .env.php 파일에서 경로를 수정할 수 있습니다. 이 설정파일은 지니 PHP에서 반드시 필요로하는 기본 파일입니다.

<?php
return [
    'base'=>'',
    'path'=> [
        'app'=>"../app",
        'conf' => "/conf",
        'theme' => "/theme",
        'view' => "/resource/views",
        'pages' => "/resource/pages",
        'layout' => "/resource/layout",
        'route' => "/app/route"
    ],    
    'Resource'=> [
        'Indexs'=>[
            "index.htm",
            "index.md",
            "index.docx"
        ],
        'menu'=>[
            'type' => "json",
            'path' => "/resource/menu",
            'file' => "menu.json"
        ]
    ],
    'Tamplate'=> [
        'PreProcess' => true,
        'Engine' => "Liquid",
        'Cache' => false
    ]
];

.env.php 파일은 PHP타입으로 연상 배열 형태로 작성을 합니다. 연상배열은 키:값 형태로 중간에 =>로 구분합니다.

커스텀 설정


환경 설정파일은 /conf 폴더 안에는 한개 이상의 설정파일이 있습니다. 환경설정 파일의 타입은 ini, php, json, yaml로 작성할 수 있습니다. 이렇게 작성한 설정파일을 프레임워크 시스템에 로딩을 하여야 합니다.

설정 파일은 한개식, 또는 폴더 전체의 파일을 로드 할 수 있습니다. 이와, 관련된 설정은 PHP언어로 작성된 /app/conf/congig.php 에서 처리합니다.

$this->Config->setFile("site2.ini", "site");

이 파일은 프레임워크에서 미리 생성된 클래스 인스턴스를 같이 제공합니다. $this->Configjiny/config 패키지 클래스의 인스턴스 값입니다.

와 같이 setFile() 메소드를 통하여 로딩을 선택할 수 있습니다. setFile() 매소드는 두개의 인자를 받습니다. 첫번재는 설정파일명, 두번째는 값을 의미합니다.

동적 로딩


서비스에 맞는 설정파일을 상황에 맞게 동적으로 로딩하여 처리할 수 있습니다. /app/conf/congig.php 는 PHP로 작성된 코드 파일 입니다. 아래와 같이 PHP 슈퍼변수를 통하여 도메인, 포트 등에서 따라서 다르게 설정파일을 로딩할 수 있습니다.

<?php

// echo $_SERVER['SERVER_NAME']."<br>";
// echo $_SERVER['SERVER_PORT']."<br>";

/**
 * 사용자 정의 환경설정
 * 도메인, 포트 값을 통하여 환경설정값을 다르게 설정할 수 있습니다.
 */
if ($_SERVER['SERVER_PORT'] == 8000) {
    $this->Config->setFile("site.ini","site");
} else {
    $this->Config->setFile("site2.ini", "site");
}

/**
 * 사용자 설정파일을 정의할 수 있습니다.
 */
$this->Config->setFile("test.yml", "test");

이는 하나의 컨덴츠로 여러개의 웹서버를 구축하여 운영을 하는 데 매우 유용할 수 있습니다. 또는 별도의 어드민 계정 사이트를 운영할때도 환경설정을 통하여 분리 할 수도 있습니다.

설정값 읽기


이렇게 등록된 설정 값들은 특별하게 제공되는 헬퍼함수 conf()를 통하여 접근을 할 수 있습니다. 핼퍼함수를 제공하는 장점은 인스턴스, 호출 위치에 상관 없이 쉽게 값을 읽어올 수 있기 때문입니다.

값을 읽어오기

conf() 헬퍼 함수는 쉽게 설정값을 읽어 올 수 있습니다. 설정값은 다차원 배월 형태로 구성이 되어 있습니다.

conf("값.값.값");

다차원 값의 구분은 을 이용하여 구분합니다. 만일 지정한 키값이 단일 값일 때는 값을 반환합니다. 또는, 지정 키값이 배열 형태라면 배열을 반환합니다.

값 설정하기

키 값을 읽는 것과 반대로 값을 설정할 수 있습니다.

conf("키.키.키", "값");

값을 설정할때는 두번재 인자로 키와 값을 같이 설정하면 됩니다.

인스턴스 얻기

헬퍼함수의 인자 키를 전달하지 않는 경우에는 jiny/config의 인스턴스를 얻을 수 있습니다.

$Config = conf();
$Config->data("ENV.path.conf");

이렇게 얻은 인스턴스를 통하여 내부 매서드를 실행할 수 있습니다.

업그레이드 및 정보


jiny/config 패키지는 현재 계속 기능을 개선하고 있습니다. 본 페키지 개발에 기여를 원하시는 경우 언제든제 코드를 작성하여 풀리퀘스트를 주시면 감사합니다. 보다 자세한 내용은 hojin.io 에서 확인이 가능합니다.