Vars 는 ENV, INI, JSON, PHP, Toml, XML 및 YAML 파일 유형에 대한 로더가 내장되어 있어 사용이 간편하고 가볍고 쉽게 확장 가능한 구성 로더입니다. 또한 곧 출시될 더 많은 프레임워크(Symfony, Laravel 등)와 함께 Silex에 대한 기본 지원도 제공됩니다.
때로는 구성 파일에 대해 다른 형식을 사용해야 하는 경우가 있으며 Vars 목표 중 하나는 가장 일반적인 구성 형식을 지원하여 이를 더 간단하게 만들어 다른 형식을 처리하기 위해 라이브러리를 전환할 필요가 없도록 하는 것입니다.
또 다른 목표는 다양한 프레임워크를 지원하여 다른 프레임워크를 다룰 때 라이브러리를 전환할 필요가 없도록 하는 것입니다. 현재는 서비스 제공업체를 통해 Silex만 지원하고 있으며, 곧 Laravel 및 Symfony도 지원할 예정입니다.
간단한 API와 직관적인 로딩 옵션을 통해 Vars 구성 로딩 및 제공을 최대한 쉽게 만들려고 노력합니다.
Vars PHP 버전 5.3+
이 필요합니다.
YAML을 사용하려면 symfony/yaml
라이브러리가 필요하며 마찬가지로 Toml 파일을 사용하려면 yosymfony/toml
필요하고 Env 파일을 사용하려면 m1/env
필요합니다.
작곡가를 통해
$ composer require m1/ Vars
// load single file
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' );
// load from dir
$ Vars = new Vars ( __DIR__ . ' /config ' );
// load from array
$ Vars = new Vars ( array (
__DIR__ . ' /config/config.yml ' ,
__DIR__ . ' /config/sub ' ,
));
이는 다양한 방법으로 수행할 수 있습니다. $ Vars
변수를 일반 배열로 처리하거나 객체 지향 방식으로 사용할 수 있습니다.
// All return the same thing
$ Vars -> get ( ' db.password ' )
$ Vars [ ' db.password ' ];
$ Vars [ ' db ' ][ ' password ' ]
같은 방법으로 값을 설정할 수도 있습니다.
// All do the same thing
$ Vars -> set ( ' db.password ' , ' test ' )
$ Vars [ ' db.password ' ] = ' test ' ;
$ Vars [ ' db ' ][ ' password ' ] = ' test ' ;
getenv()
에서 변수를 가져올 수도 있습니다.
// All do the same thing
$ Vars -> toEnv ();
getenv ( ' db.password ' );
이에 대한 자세한 내용은 환경 변수 섹션을 확인하세요.
구성을 다른 구성으로 상대적으로 절대적으로 쉽게 가져올 수 있습니다. 이는 구성 파일 유형에 따라 다르므로 /tests/mocks/ 폴더에서 예제를 확인하세요.
# example_1.yml
test_key_1 : test_value_1
imports : example_2.yml
# example_2.yml
test_key_2 : test_value_2
다음을 반환합니다.
[
" test_key_1 " => " test_value_1 " ,
" test_key_2 " => " test_value_2 "
]
가져오기는 기본적으로 키를 기준으로 가져옵니다. 예:
test_key_1 :
imports : example_2.yml
다음을 반환합니다.
[
" test_key_1 " => [
" test_key_2 " => " test_value_2 "
]
]
그러나 이를 다양한 방법으로 변경할 수 있습니다.
# example 1
test_key_1 :
imports :
- {resource: example.yml, relative: false}
# example 2
test_key_2 :
imports :
resource : example.yml
relative : false
다양한 파일을 가져오고 모든 파일의 상대성을 설정하려는 경우 다음을 수행할 수 있습니다.
test_key_1 :
imports :
relative : false
resource :
- example_2.yml
- example_3.yml
위의 모든 사항으로 인해 example_2.yml
및 example_3.yml
변수가 구성 파일에 절대 변수가 됩니다.
[
" test_key_1 " => []
" test_key_2 " => " test_value_2 " // from example_2.yml
"test_key_3" => "test_value_3" // from example_3.yml
]
위의 모든 구문을 사용하여 디렉터리를 가져올 수도 있습니다.
test_key_1 :
imports : sub/
디렉터리 가져오기는 기본적으로 재귀적이지 않으며 폴더 내의 폴더를 검색하지 않습니다. 재귀 토글을 추가하여 이를 변경할 수 있습니다.
test_key_1 :
imports :
resource : sub/
recursive : true
또는 재귀 플래그를 추가하여:
test_key_1 :
imports :
resource : sub/*
파일 로드와 마찬가지로 하나의 재귀 토글을 사용하여 디렉터리를 대량으로 가져올 수 있습니다.
test_key_1 :
imports :
recursive : false
resource :
- sub/
- sub1/
디렉토리 가져오기는 로더와 로더가 지원하는 확장에 따라 달라집니다. 자세한 내용은 로더 섹션을 참조하세요.
가져올 때 다양한 플래그를 사용할 수 있습니다.
if else 플래그 ?:
첫 번째 파일이 존재하는 경우 해당 파일을 사용하도록 합니다. 그렇지 않으면 정의된 다른 파일을 사용합니다. 예:
imports : " example_1.yml ?: example_2.yml "
참고: if else 플래그가 작동하려면 문자열을 따옴표로 묶어야 합니다.
예외 억제 플래그 @
-- 파일을 찾을 수 없는 예외를 억제합니다. 예:
imports : @file_does_not_exist.yml
재귀 플래그를 사용하면 디렉터리 내의 디렉터리에서 파일을 검색할 수 있습니다. 예:
imports :
resource : sub/*
위의 플래그를 결합할 수도 있으므로 else 파일 옵션이 존재하지 않는 경우 예외가 발생하지 않습니다. 예:
imports : " example_1.yml ?: @example_2.yml "
개별 파일이나 리소스를 얻을 수 있습니다.
// All return the same thing
$ Vars -> getResource ( ' example_2.yml ' )-> get ( ' test_key_2 ' );
$ Vars -> getResource ( ' example_2.yml ' )[ ' test_key_2 ' ];
Vars 에는 다양한 옵션이 있습니다.
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' , [
// this will affect how you getResource() and will default to the path
// of the first resource you initiate
' path ' => __DIR__ . ' /config ' ,
// to cache or not -- defaults to true
' cache ' => true ,
// where the cache is stored -- If not set will default to the base path
' cache_path ' => __DIR__ . ' /config/ ' ,
// How long the cache lasts for -- Defaults to 300 seconds (5 minutes)
' cache_expire ' => 300 ,
// Replacement variables -- see variables section for more detail
' replacements ' => [
' foo ' => ' bar ' ,
' foobar ' => ' barfoo '
],
// Merge globals -- see globals section for more detail
' merge_globals ' => true ,
// The file loaders to load the configs -- see loader section for more detail
' loaders ' => [
' default '
]
]);
path
는 $ Vars ->getResource($filename)
의 $filename
이 계산되는 방식입니다. 예를 들어:
path
__DIR__.'/config'
로 설정하고 __DIR__.'/app/test_1.yml'
가져온 경우:
# example_1.yml
imports : example_2.yml
그러면 example_1.yml
과 example_2.yml
$filename
각각 ../app/test_1.yml
과 ../app/test_1.yml
이 됩니다.
path
설정되지 않은 경우 첫 번째 파일 리소스 경로가 path
로 사용됩니다. 예:
// example 1
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' );
// example 2
$ Vars = new Vars ([
__DIR__ . ' /config/config.yml ' ,
__DIR__ . ' /sub/config.yml ' ,
]);
둘 다 path
로 __DIR__.'/config'
사용합니다.
Vars
: Replacements
, In-file
및 Environment
에서 3가지 유형의 변수를 사용할 수 있으며 구문은 다음과 같습니다.
변수 유형 | 통사론 |
---|---|
교체품 | %VARIABLE% |
파일 내 | %$VARIABLE% |
환경 | %^VARIABLE% |
더 나은 가독성을 위해 다음과 같이 변수 이름과 접두사/접미사 사이에 공백을 넣을 수도 있습니다.
replacement_variable : % VARIABLE %
infile_variable : %$ VARIABLE %
env_variable : %^ VARIABLE %
대체 변수는 Vars
외부에서 로드되므로 __dir__
과 같은 PHP
함수/로직에 자주 사용됩니다.
test_key_1 : %foo%
test_key_2 : /bar/%foobar%/bar
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' , [
' replacements ' => [
' foo ' => ' bar ' ,
' foobar ' => ' barfoo '
],
]);
출력:
[
" test_key_1 " => " bar " ,
" test_key_2 " => " /bar/barfoo/foobar/ "
]
대체 항목에는 접두사와 접미사가 붙어야 합니다 %
파일에서 변수를 로드할 수도 있습니다.
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' , [
' replacements ' => __DIR__ . ' /config/variables.yml '
]);
다음과 같이 파일에 이미 정의된 키의 변수를 사용할 수도 있습니다.
test_key_1 : hello
test_key_2 : /bar/%$test_key_1%/bar
출력:
[
" test_key_1 " => " bar " ,
" test_key_2 " => " /bar/hello/foobar/ "
]
대체 항목에는 접두사 %$
와 접미사 %
가 와야 합니다.
in-file
및 replacements
모두에 대해 점 표기법 구문을 사용하여 배열을 가져올 수 있습니다. 예:
test_key_1 :
test_key_2 : hello
test_key_3 : /bar/%$test_key_1.test_key_2%/bar
출력:
[
" test_key_1 " => array (
" test_key_2 " => " hello "
),
" test_key_2 " => " /bar/hello/foobar/ "
]
환경 변수를 사용하여 교체를 수행할 수도 있습니다.
test_key_1 : %^DATABASE_USERNAME%
test_key_2 : %^DATABASE_PASSWORD%
# nginx config example
location @site {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root /index.php;
# env variables
fastcgi_param DATABASE_USERNAME test_username;
fastcgi_param DATABASE_PASSWORD test_password;
}
출력:
[
" test_key_1 " => " test_username " ,
" test_key_2 " => " test_password "
]
환경 변수는 접두사 %^
, 접미사 %
로 시작해야 합니다.
getenv()
에서 구성 배열을 사용할 수 있도록 만들 수도 있습니다.
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' );
$ Vars -> toEnv ();
참고: 이에 대한 구성은 점 표기법으로 평면화됩니다. 예:
test_key_1 :
test_key_2 : value
다음을 통해 액세스할 수 있습니다.
getenv ( ' test_key_1.test_key_2 ' ); // value
Vars
의 Globals
다음과 같이 정의된 변수를 참조합니다.
_globals :
test_key_1 : test_value_1
기본적으로 이들은 _globals
배열에 캡슐화되어 있습니다. 이를 사용하면 Vars
의 getGlobals()
에서 액세스할 수 있습니다.
기본 작업은 이를 다른 파일 내용에 병합하는 것입니다.
_globals :
test_key_1 : test_value_1
test_key_2 : test_value_2
다음과 같이 됩니다:
[
' test_key_1 ' => ' test_value_1 ' ,
' test_key_2 ' => ' test_value_2 ' ,
]
그러나 옵션을 통해 merge_globals
false
로 변경하여 이를 무시할 수 있습니다.
이것이 이해되지 않는다면 아마도 전역 변수를 전혀 사용할 필요가 없을 것입니다. 그러나 $app
아래의 모든 것을 캡슐화하는 프레임워크 작업에 유용하며 다음과 같은 일부 키 => 값에 액세스할 수 있기를 원합니다. 그래서: $app['test_key_1']
. 더 많은 예를 보려면 Silex 공급자 섹션을 참조하세요.
Vars 5분 동안 리소스를 자동으로 캐시합니다. cache
옵션을 false
로 설정하여 이 기능을 끌 수 있습니다.
설정되지 않은 경우 cache_path
path
설정된 대로 설정됩니다. cache_path
쓰기 가능해야 합니다.
캐시를 무효화하려면 Vars
라는 cache_path
내부의 폴더를 제거하기만 하면 됩니다(예: rm -rf /var/www/application/app/cache/ Vars
캐시 파일은 opcache의 추가 속도 향상으로 인해 .php 파일입니다.
Silex 공급자를 사용하는 경우 디버그 모드에 있으면 캐시가 사용 및 설정되지 않습니다.
로더는 Vars 다양한 파일 형식(기본값은 Ini, Json, Php, Toml, Xml 및 Yaml)을 읽을 수 있도록 해줍니다.
다음 옵션을 통해 로더를 활성화 및 비활성화할 수 있습니다.
기본값은 모든 기본 로더를 로드합니다.
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' , [
' loaders ' => ' default '
]);
// You can load individual loaders:
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' , [
' loaders ' => [
' ini ' ,
' json '
[
]);
//You can also create and load custom loaders:
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' , [
' loaders ' => [
' FooBarCustomFooBarLoader ' ,
' ini ' ,
' json '
]
]);
자신만의 사용자 정의 로더를 만들려면 M1 Vars LoaderAbstractLoader
확장하고, public static $supported
배열에 지원되는 확장이 있어야 하며, 파일의 내용을 로드하는 public function load()
있어야 합니다.
다음은 .txt 파일을 로드하는 기본 예입니다.
namespace M1 Foo Bar Loader ;
use M1 Vars Loader AbstractLoader ;
class TextLoader extends AbstractLoader
{
public static $ supported = array ( ' txt ' );
public function load ()
{
$ content = [];
foreach ( file ( $ this -> entity ) as $ line ) {
list ( $ key , $ value ) = explode ( ' : ' , $ line , 2 );
$ content [ trim ( $ key )] = trim ( $ value );
}
$ this -> content = $ content ;
return $ this ;
}
}
그런 다음 이 로더를 사용하려면 다음을 사용하면 됩니다.
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' , [
' loaders ' => [
' M1FooBarLoaderTextLoader ' ,
]
]);
참고: 이 로더를 실제로 사용하지 마십시오. 순전히 프레젠테이션 목적으로 사용됩니다.
이 라이브러리를 Silex와 함께 사용하는 것은 매우 간단합니다. 다른 서비스 공급자를 등록할 때 등록하기만 하면 됩니다.
$ app -> register ( new M1 Vars Provider Silex Vars ServiceProvider ( ' example.yml ' ), [
' Vars .path ' => __DIR__ . ' /../../app/config/test/ ' ,
' Vars .options ' => [
' cache ' => true ,
' cache_path ' => __DIR__ . ' /../../app/config/cache/ ' ,
' cache_expire ' => 500 ,
' replacements ' => [
' test ' => ' test_replacement '
],
' loaders ' => [
' yml ' ,
' json '
],
' merge_globals ' => true ,
' replacements ' => __DIR__ . ' /../../app/config/replacements.json ' ,
]]);
그런 다음 $app[' Vars ']
에서 구성에 액세스할 수 있습니다.
참고: $app['debug'] = true
이면 캐시가 사용되지 않습니다.
점 표기법을 사용하여 $app에서 구성 값에 액세스할 수도 있습니다. 예:
test_key_1 :
test_key_2 : value
test_key_3 : value
다음과 같이 점 표기법을 사용하여 위의 내용을 얻을 수 있습니다.
$ app [ ' Vars ' ][ ' test_key_1.test_key_2 ' ]; // value
$ app [ ' Vars ' ][ ' test_key_3 ' ]; // value
다음과 같이 전역 변수를 $app
에 병합할 수도 있습니다.
# example.yml
_globals :
monolog.logfile : log.log
test_key_1 : test_value_2
$ app -> register ( new M1 Vars Provider Silex Vars ServiceProvider ( ' example.yml ' ));
// register monolog here and other service providers
$ app [ ' Vars .merge ' ]();
$app[' Vars .merge']()
참고하세요. 이는 서비스 공급자 기본값을 재정의하므로 이 예제에서는 monolog
Vars 구성에 정의된 로그 파일을 사용합니다.
구성에서 구성 값을 제공하는 서비스 공급자를 호출한 후 Vars .merge
호출해야 합니다.
$app[' Vars .test_key_1']
통해 test_key_1
에 액세스할 수도 있으며, 원한다면 $app['monolog.logfile']
과 같은 전역 변수에 액세스할 수도 있습니다.
Vars ($resource, $options = array())
새로운 Vars 구성을 생성하는 생성자:
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' , [
// this will affect how you getResource() and will default to the path
// of the first resource you initiate
' path ' => __DIR__ . ' /config ' ,
// to cache or not -- defaults to true
' cache ' => true ,
// where the cache is stored -- If not set will default to the base path
' cache_path ' => __DIR__ . ' /config/ ' ,
// How long the cache lasts for -- Defaults to 300 seconds (5 minutes)
' cache_expire ' => 300 ,
// Replacement variables -- see variables section for more detail
' replacements ' => [
' foo ' => ' bar ' ,
' foobar ' => ' barfoo '
],
// The file loaders to load the configs -- see loader section for more detail
' loaders ' => [
' default '
]
]);
getContent()
모든 구성의 구문 분석된 콘텐츠를 반환합니다.
getResource($resource)
지정된 리소스를 가져오고 파일 리소스를 반환하거나 리소스가 없으면 false를 반환합니다.
$resource
이름은 기본 경로와 파일 이름에 정의된 경로를 기반으로 합니다.
# example.yml
imports : example2.yml
test_1 : value
# example2.yml
test_2 : value
$ Vars = new Vars ( ' example.yml ' );
$ Vars -> getResource ( ' example2.yml ' ); // FileResource
$ Vars -> getResource ( ' example2.yml ' )-> getContent ();
# output:
# [
# "test_2" => "value"
# ]
getResources()
가져온 모든 리소스를 반환하며 FileResource
개체가 됩니다.
toEnv()
getenv()
통해 구성을 사용할 수 있도록 만듭니다.
$ Vars = new Vars ( ' example.yml ' );
$ Vars -> toEnv ();
getenv ( ' test_1 ' ); // value
toDots()
구성이 점 표기법 배열로 병합되도록 만듭니다.
test_value_1 :
test_value_2 : value
test_value_3 : value
$ Vars = new Vars ( ' example.yml ' );
$ Vars -> toDots ();
# output:
# [
# "test_value_1.test_value_2" => "value",
# "test_value_1.test_value_3" => "value
# ]
getGlobals()
_globals
에 정의된 값을 가져옵니다.
set($key, $value)
구성 키를 설정합니다.
$ Vars = new Vars ( ' example.yml ' );
$ Vars -> set ( ' test_key_1 ' , ' value_2 ' );
get($key)
구성 키를 가져옵니다.
$ Vars = new Vars ( ' example.yml ' );
$ Vars -> get ( ' test_key_1 ' ); // value
getRawContent()
파일에서 구문 분석되지 않은 원시 콘텐츠 가져오기
# example.yml
test_value_1 :
imports : example2.yml
test_value_2 : %root%/foo/%dir%
$ Vars = new Vars ( ' example.yml ' );
$ Vars -> getResource ( ' example.yml ' )-> getRawContent ();
# output:
# [
# test_value_1:
# imports: example2.yml
# test_value_2: %root%/foo/%dir%
# ]
getContent()
getContent()를 참조하세요.
get($key)
get()을 참조하세요.
최근 변경된 사항에 대한 자세한 내용은 CHANGELOG를 참조하세요.
$ composer test
자세한 내용은 CONTRIBUTING을 참조하세요.
보안 관련 문제를 발견한 경우 문제 추적기를 사용하는 대신 [email protected]으로 이메일을 보내주세요.
MIT 라이센스(MIT). 자세한 내용은 라이센스 파일을 참조하십시오.