Vars adalah pemuat konfigurasi yang mudah digunakan, ringan, dan mudah diperluas dengan pemuat bawaan untuk jenis file ENV, INI, JSON, PHP, Toml, XML, dan YAML. Ini juga dilengkapi dukungan bawaan untuk Silex dengan lebih banyak kerangka kerja (Symfony, Laravel dll) yang akan segera hadir.
Terkadang Anda terpaksa menggunakan format berbeda untuk file konfigurasi dan salah satu tujuan Vars adalah mempermudah Anda dengan mendukung format konfigurasi paling umum sehingga Anda tidak perlu berpindah perpustakaan untuk menangani format yang berbeda.
Tujuan lainnya adalah untuk mendukung kerangka kerja yang berbeda sehingga sekali lagi Anda tidak perlu berpindah perpustakaan ketika berhadapan dengan kerangka kerja yang berbeda. Saat ini hanya mendukung Silex menggunakan penyedia layanan, dukungan untuk Laravel dan Symfony segera menyusul.
Dengan API sederhana dan opsi pemuatan yang intuitif, Vars mencoba membuat pemuatan dan penyediaan konfigurasi semudah mungkin bagi Anda.
Vars memerlukan PHP versi 5.3+
.
Jika Anda ingin menggunakan YAML, Anda memerlukan pustaka symfony/yaml
dan Anda juga memerlukan yosymfony/toml
untuk menggunakan file Toml dan m1/env
untuk menggunakan file Env.
Melalui Komposer
$ 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 ' ,
));
Hal ini dapat dilakukan dengan berbagai cara, Anda dapat memperlakukan variabel $ Vars
sebagai array normal atau Anda dapat menggunakannya dalam cara berorientasi objek
// All return the same thing
$ Vars -> get ( ' db.password ' )
$ Vars [ ' db.password ' ];
$ Vars [ ' db ' ][ ' password ' ]
Anda juga dapat menetapkan nilai dengan cara yang sama
// All do the same thing
$ Vars -> set ( ' db.password ' , ' test ' )
$ Vars [ ' db.password ' ] = ' test ' ;
$ Vars [ ' db ' ][ ' password ' ] = ' test ' ;
Anda juga bisa mendapatkan variabel dari getenv()
// All do the same thing
$ Vars -> toEnv ();
getenv ( ' db.password ' );
Untuk info lebih lanjut tentang ini, periksa bagian Variabel Lingkungan
Anda dapat dengan mudah mengimpor konfigurasi secara relatif dan mutlak ke konfigurasi lain, konfigurasi ini berbeda berdasarkan jenis file konfigurasi, jadi periksa folder /tests/mocks/ untuk contoh
# example_1.yml
test_key_1 : test_value_1
imports : example_2.yml
# example_2.yml
test_key_2 : test_value_2
Akan kembali:
[
" test_key_1 " => " test_value_1 " ,
" test_key_2 " => " test_value_2 "
]
Impor diimpor relatif terhadap kunci secara default, misalnya:
test_key_1 :
imports : example_2.yml
Akan kembali:
[
" test_key_1 " => [
" test_key_2 " => " test_value_2 "
]
]
Namun Anda dapat mengubahnya dengan berbagai cara:
# example 1
test_key_1 :
imports :
- {resource: example.yml, relative: false}
# example 2
test_key_2 :
imports :
resource : example.yml
relative : false
Jika mengimpor berbagai file dan Anda ingin mengatur relativitas semua file, Anda dapat melakukan hal berikut:
test_key_1 :
imports :
relative : false
resource :
- example_2.yml
- example_3.yml
Semua hal di atas menyebabkan variabel example_2.yml
dan example_3.yml
menjadi absolut pada file konfigurasi:
[
" test_key_1 " => []
" test_key_2 " => " test_value_2 " // from example_2.yml
"test_key_3" => "test_value_3" // from example_3.yml
]
Anda juga dapat mengimpor direktori menggunakan semua sintaks di atas:
test_key_1 :
imports : sub/
Mengimpor direktori secara default tidak bersifat rekursif dan tidak akan mencari folder di dalam folder, Anda dapat mengubahnya dengan menambahkan tombol rekursif:
test_key_1 :
imports :
resource : sub/
recursive : true
atau dengan menambahkan tanda rekursif:
test_key_1 :
imports :
resource : sub/*
Seperti halnya memuat file, Anda dapat mengimpor direktori secara massal dengan satu tombol rekursif:
test_key_1 :
imports :
recursive : false
resource :
- sub/
- sub1/
Pengimporan direktori bergantung pada pemuat dan ekstensi yang didukung oleh pemuat. Lihat bagian pemuat untuk lebih detail.
Anda dapat menggunakan berbagai tanda saat mengimpor.
Tanda if else ?:
membuatnya jadi jika file pertama ada, gunakan itu -- jika tidak, gunakan file lain yang ditentukan, misalnya:
imports : " example_1.yml ?: example_2.yml "
Catatan: Anda perlu membungkus string dalam tanda kutip agar tanda if else berfungsi
Tanda pengecualian penekan @
-- menyembunyikan pengecualian file yang tidak ditemukan. misalnya:
imports : @file_does_not_exist.yml
Bendera rekursif membuat direktori di dalam direktori dicari file. misalnya:
imports :
resource : sub/*
Anda juga dapat menggabungkan tanda-tanda di atas, jadi jika opsi file lain tidak ada, maka tidak akan ada pengecualian, misalnya:
imports : " example_1.yml ?: @example_2.yml "
Anda bisa mendapatkan file atau sumber daya individual:
// All return the same thing
$ Vars -> getResource ( ' example_2.yml ' )-> get ( ' test_key_2 ' );
$ Vars -> getResource ( ' example_2.yml ' )[ ' test_key_2 ' ];
Ada berbagai pilihan untuk 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
adalah bagaimana $filename
di $ Vars ->getResource($filename)
dihitung. Misalnya:
Jika Anda menyetel path
ke __DIR__.'/config'
dan Anda mengimpor __DIR__.'/app/test_1.yml'
:
# example_1.yml
imports : example_2.yml
Maka example_1.yml
dan example_2.yml
$filename
masing-masing akan menjadi ../app/test_1.yml
dan ../app/test_1.yml
.
Jika tidak ada path
yang disetel maka jalur sumber daya file pertama akan digunakan sebagai path
, misalnya:
// example 1
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' );
// example 2
$ Vars = new Vars ([
__DIR__ . ' /config/config.yml ' ,
__DIR__ . ' /sub/config.yml ' ,
]);
Keduanya akan menggunakan __DIR__.'/config'
sebagai path
Anda dapat menggunakan 3 jenis variabel di Vars
: Replacements
, In-file
dan Environment
, sintaksnya adalah:
Tipe Variabel | Sintaksis |
---|---|
Penggantian | %VARIABLE% |
Dalam file | %$VARIABLE% |
Lingkungan | %^VARIABLE% |
Agar lebih mudah dibaca, Anda juga dapat memberi spasi di antara nama variabel dan awalan/akhiran seperti:
replacement_variable : % VARIABLE %
infile_variable : %$ VARIABLE %
env_variable : %^ VARIABLE %
Variabel pengganti diambil dari luar Vars
, sehingga sering digunakan untuk fungsi/logika PHP
, seperti __dir__
:
test_key_1 : %foo%
test_key_2 : /bar/%foobar%/bar
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' , [
' replacements ' => [
' foo ' => ' bar ' ,
' foobar ' => ' barfoo '
],
]);
Keluaran:
[
" test_key_1 " => " bar " ,
" test_key_2 " => " /bar/barfoo/foobar/ "
]
Pengganti Anda harus diawali dan diakhiri dengan %
Anda juga dapat memuat variabel dari file:
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' , [
' replacements ' => __DIR__ . ' /config/variables.yml '
]);
Anda juga dapat menggunakan variabel dari kunci yang sudah Anda tentukan di file, seperti:
test_key_1 : hello
test_key_2 : /bar/%$test_key_1%/bar
Keluaran:
[
" test_key_1 " => " bar " ,
" test_key_2 " => " /bar/hello/foobar/ "
]
Pengganti Anda harus diawali dengan %$
dan diakhiri dengan %
.
Untuk in-file
dan replacements
, Anda dapat menggunakan sintaks notasi titik untuk masuk ke dalam array, misalnya:
test_key_1 :
test_key_2 : hello
test_key_3 : /bar/%$test_key_1.test_key_2%/bar
Keluaran:
[
" test_key_1 " => array (
" test_key_2 " => " hello "
),
" test_key_2 " => " /bar/hello/foobar/ "
]
Anda juga dapat menggunakan variabel lingkungan untuk melakukan penggantian:
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;
}
Keluaran:
[
" test_key_1 " => " test_username " ,
" test_key_2 " => " test_password "
]
Variabel lingkungan Anda harus diawali dengan %^
dan diakhiri dengan %
Anda juga dapat membuatnya agar array konfigurasi Anda tersedia untuk getenv()
:
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' );
$ Vars -> toEnv ();
Catatan: Konfigurasi Anda akan diratakan menjadi notasi titik untuk ini, misalnya:
test_key_1 :
test_key_2 : value
Akan diakses oleh:
getenv ( ' test_key_1.test_key_2 ' ); // value
Globals
di Vars
mengacu pada variabel yang didefinisikan sebagai berikut:
_globals :
test_key_1 : test_value_1
Pada dasarnya mereka hanya dienkapsulasi dalam array _globals
-- kegunaannya adalah agar Anda dapat mengaksesnya dari getGlobals()
dari Vars
Tindakan defaultnya adalah menggabungkannya ke dalam konten file lainnya, sehingga:
_globals :
test_key_1 : test_value_1
test_key_2 : test_value_2
Menjadi:
[
' test_key_1 ' => ' test_value_1 ' ,
' test_key_2 ' => ' test_value_2 ' ,
]
Namun Anda dapat menimpanya dengan mengubah merge_globals
menjadi false
melalui opsi.
Jika ini tidak masuk akal maka Anda mungkin tidak perlu menggunakan global sama sekali, tetapi global berguna untuk bekerja dengan kerangka kerja yang merangkum semua yang ada di bawah katakanlah $app
dan Anda ingin dapat mengakses beberapa nilai kunci => seperti jadi: $app['test_key_1']
. Lihat bagian penyedia Silex untuk contoh lebih lanjut.
Vars secara otomatis menyimpan sumber daya dalam cache selama 5 menit, Anda dapat mematikannya dengan menyetel opsi cache
ke false
.
cache_path
jika tidak disetel disetel ke path
yang disetel. cache_path
harus dapat ditulisi.
Untuk membatalkan cache, cukup hapus folder di dalam cache_path
Anda yang bernama Vars
, misalnya: rm -rf /var/www/application/app/cache/ Vars
File cache adalah file .php karena kecepatan ekstra opcache.
Jika Anda menggunakan penyedia Silex, maka cache tidak akan digunakan dan disetel jika Anda dalam mode debug.
Loader inilah yang memungkinkan Vars membaca berbagai jenis file (defaultnya adalah Ini, Json, Php, Toml, Xml, dan Yaml).
Anda dapat mengaktifkan dan menonaktifkan loader melalui opsi:
Default memuat semua pemuat default:
$ 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 '
]
]);
Untuk membuat pemuat khusus Anda sendiri, Anda harus memperluas M1 Vars LoaderAbstractLoader
, memiliki ekstensi yang didukung dalam array public static $supported
dan memiliki public function load()
yang memuat konten file.
Berikut adalah contoh primitif yang memuat file .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 ;
}
}
Kemudian untuk menggunakan pemuat ini, Anda cukup menggunakan:
$ Vars = new Vars ( __DIR__ . ' /config/config.yml ' , [
' loaders ' => [
' M1FooBarLoaderTextLoader ' ,
]
]);
Catatan: jangan gunakan pemuat ini secara nyata, ini murni untuk tujuan presentasi
Cukup mudah untuk menggunakan perpustakaan ini dengan Silex, cukup daftarkan saat Anda mendaftarkan penyedia layanan lainnya:
$ 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 ' ,
]]);
Kemudian Anda dapat mengakses konfigurasi Anda dari $app[' Vars ']
Catatan: Jika Anda $app['debug'] = true
maka cache tidak akan digunakan.
Anda juga dapat mengakses nilai konfigurasi dari $app dengan menggunakan notasi titik, misalnya:
test_key_1 :
test_key_2 : value
test_key_3 : value
Anda bisa mendapatkan yang di atas menggunakan notasi titik seperti:
$ app [ ' Vars ' ][ ' test_key_1.test_key_2 ' ]; // value
$ app [ ' Vars ' ][ ' test_key_3 ' ]; // value
Anda juga dapat menggabungkan global ke dalam $app
seperti:
# 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 ' ]();
Perhatikan $app[' Vars .merge']()
-- Ini mengesampingkan default penyedia layanan sehingga dalam contoh ini monolog
akan menggunakan file log yang ditentukan dalam konfigurasi Vars .
Anda harus menghubungi Vars .merge
setelah Anda menghubungi penyedia layanan yang Anda berikan nilai konfigurasinya di konfigurasi Anda.
Anda juga dapat mengakses test_key_1
melalui $app[' Vars .test_key_1']
dan serupa jika Anda mau, Anda dapat mengakses global seperti $app['monolog.logfile']
.
Vars ($resource, $options = array())
Konstruktor untuk membuat konfigurasi Vars baru:
$ 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()
Mengembalikan konten yang diurai dari semua konfigurasi.
getResource($resource)
Dapatkan sumber daya tertentu, kembalikan sumber daya file atau false jika sumber daya tidak ada.
Nama $resource
didasarkan pada jalur yang ditentukan di jalur dasar dan nama file.
# 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()
Mengembalikan semua sumber daya yang diimpor, mereka akan menjadi objek FileResource
.
toEnv()
Jadikan konfigurasi tersedia melalui getenv()
:
$ Vars = new Vars ( ' example.yml ' );
$ Vars -> toEnv ();
getenv ( ' test_1 ' ); // value
toDots()
Membuat konfigurasinya diratakan menjadi array notasi titik
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()
Mendapatkan nilai yang ditentukan dalam _globals
set($key, $value)
Tetapkan kunci konfigurasi:
$ Vars = new Vars ( ' example.yml ' );
$ Vars -> set ( ' test_key_1 ' , ' value_2 ' );
get($key)
Mendapatkan kunci konfigurasi:
$ Vars = new Vars ( ' example.yml ' );
$ Vars -> get ( ' test_key_1 ' ); // value
getRawContent()
Dapatkan konten mentah yang belum diurai dari file
# 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()
Lihat getContent()
get($key)
Lihat dapatkan()
Silakan lihat CHANGELOG untuk informasi lebih lanjut tentang apa yang berubah baru-baru ini.
$ composer test
Silakan lihat KONTRIBUSI untuk rinciannya.
Jika Anda menemukan masalah apa pun terkait keamanan, silakan kirim email ke [email protected] alih-alih menggunakan pelacak masalah.
Lisensi MIT (MIT). Silakan lihat File Lisensi untuk informasi lebih lanjut.