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 ' ); // valuegetRawContent()파일에서 구문 분석되지 않은 원시 콘텐츠 가져오기
# 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). 자세한 내용은 라이센스 파일을 참조하십시오.