Global Config
Windwalker stores global config files in /etc
folder, you can see config.yml
and secret.yml
file. These two config files will be merged
in runtime, so settings in secret.yml
will override the same key in config.yml
.
config.yml
The config.yml
stores some global system settings includes the language locale, session time, cache storage, timezone etc.
Which is your application need and will be track by VCS, .
secret.yml
And the secret.yml
stores some customize or sensitive settings which you don't want to track by VCS, for example, the database account
or the 3rd party service API key, you will not hope to push these information to GitHub or other public VCS service, so we will
write some keys in secret.dist.yml
.
For example, we can prepare some empty keys in secret.dist.yml
then push this file to VCS.
## secret.dist.yml
## Keep NULL to notice developers fill this data.
amazon:
key: ~
secret: ~
When Someone clone this project, they must copy secret.dist.yml
to secret.yml
and fill the keys.
## secret.yml
## Fill real data to use.
amazon:
key: ************
secret: *************************
Override config.yml
If you set a config in config.yml
## config.yml
foo: bar
You can override it in secret.yml
## secret.yml
foo: yoo
Now the foo
value will be yoo
not bar
.
Environment Config
Environment configs stored ad etc/app/
:
web.php
=> Config file for Webdev.php
=> Config file for Web development modeconsole.php
=> Config file for CLItest.php
=> Config file for testwindwalker.php
=> Config file for all
Environment config contains some important system settings, you can add providers, listeners and middlewares to customize your system process.
Get & Set Config Data
In Application, you can use get()
to get config.
// Use Ioc get Application then get config
$value = Ioc::getApplication()->get('foo', [default value]);
// Get config in controller
$value = $this->app->get('foo', [default value]);
// Set data
$this->app->set('foo', 'baz');
Get config by Config object.
// In everywhere
$config = Ioc::getConfig();
$foo = $config->get('foo');
// You can also get data by array access.
$foo = $config['foo'];
Config is a Structure object, please see Structure Object
Nested Data
If you have multi-level config:
morning:
break:
first: egg
Please use dot (.
) as separator:
$config->get('morning.break.first'); // sakura
// OR get data by array access
$config['morning.break.first']; // sakura
Add New Config Files
Open src/app/windwalker.php
(or web.php
, console.php
), add new config file at configs
element. Windwalker supports php
, json
and yaml
format
to save config.
// ...
'configs' => [
500 => WINDWALKER_ETC . '/my-config.yml'
],
// ...
We use numeric keys to support sorting of config files, the bigger is later loaded, so last config will override previous.
Package Config
Every packages has their own configs. If you have a FlowerPackage
and it's alias is flower
, create a file to etc/package/flower.php
.
The Package object will auto load this config file.
<?php
// etc/package/flower.php
return [
'foo' => 'bar'
];
You can get package config from package object:
$package = PackageHelper::getPackage('flower');
$package->get('foo'); // bar
Description of config.yaml
system:
# Enanle debug mode, will disable cache, and log some errors.
debug: false
# The PHP error reporting level, 0 is hide all errors, -1 is the biggest report level.
error_reporting: 0
# Default system timezone.
timezone: 'UTC'
# Secret code will be a salt to generate hashs when system running,
# Will be replace when Windwalker installation.
secret: 'This-token-is-not-safe'
error:
# The error template & renderer engine
template: windwalker.error.default
engine: php
log: true
session:
# Session handler, supports `native`, `database`, `apc`, `memcached`
handler: native
# By minutes
expire_time: 15
routing:
# Enable routing debug, if route key not found when you generate routs,
# will raise error and stop application.
# @deprecated
debug: true
# Simple routing help us auto find controller by URL: `{package}/{controller}` without routing config,
# Disable this function will enhance performance.
simple_route: true
cache:
# Disabled cache will make all cache as null storage and not stored to storage.
# But you can use CacheFactory::createCache('mycache') to ignore this settings.
enabled: false
# The default sotrage, you can use other storages by use `CacheManager::getCache('name', 'storage')`
# Support storages: file / raw_file / memcached / null / redis / array / runtime_array
storage: file
# Cache serializer decided how to serialize and store data into storage.
# Support serializers: php / json / string / raw
serializer: php
# Cache time (minutes)
time: 15
crypt:
# The Crypt cipher method.
# Support ciphers: blowfish (bf) / aes-256 (aes) / 3des / php_aes / sodium
cipher: blowfish
# The hashing algorithm
# Support algorithms: blowfish (bf) / md5 / sha256 / sha512 / argon2 / scrypt
hash_algo: blowfish
# The hashing cost depends on different algorithms. Keep default if you don't know how to use it.
hash_cost: ~
asset:
# The asset folder in public root, default is `asset`
folder: asset
# The full asset uri, default is NULL. If you set this uri, it will override `asset.folder`.
# This is useful if you want to put all asset files on cloud storage.
uri: ~
language:
# Language debug will mark untranslated string by `??` and stored orphan in Languages object.
debug: false
# The current locale
locale: en-GB
# The default locale, if translated string in current locale not found, will fallback to default locale.
default: en-GB
# Dfault languaghe file format, you can use other foramt in runtime by `Translator::loadFile($file, 'yaml')`
format: ini
console:
# Custom scripts, add some commands here to batch execute. Example:
# scripts:
# foo:
# - git pull
# - composer install
# - php windwalker migration migrate
#
# Then just run `$ php windwalker run foo`
scripts: ~
If you found a typo or error, please help us improve this document.