Configuration
Before start using phoenix you need to create configuration file. If you don't want to set --config
option to phoenix commands, name of your configuration file has to be one of phoenix.php, phoenix.yml, phoenix.neon or phoenix.json and it has to be stored at the same directory as you execute phoenix from, e.g. project root.
Basically configuration is an array which is passed to phoenix commands. Files with extensions yml (yaml), neon and json are parsed, php configuration file is included. It means that php file has to return an configuration array directly.
Configuration array consist of four parts:
- log_table_name
- string - default "phoenix_log"
- migration_dirs
- array - list of migration directories where migrations can be stored in. Array keys are used as directory identifier, values are paths to directories.
- environments
- array - list of environment where migrations are executed, e.g. local, staging, production etc.
- default_environment
- string - environment which is used in phoenix command if --environment
option is not set. It has to be one of keys from environments
array. If no default_environment
is set, first of environments
is used.
Example
Let's say you want to create configuration file, where log_table_name
is "my_phoenix_log", you have two migration_dirs
(first and second, which are located in the same directory as configuration file), also two environments
both uses mysql adapter, and your default_environment
is "local". Now we show you, how this config looks like using different type of configuration files:
phoenix.php
<?php
return [
'log_table_name' => 'my_phoenix_log',
'migration_dirs' => [
'first' => __DIR__ . '/first_dir',
'second' => __DIR__ . '/second_dir',
],
'environments' => [
'local' => [
'adapter' => 'mysql',
'version' => '5.7.0', // optional - if not set it is requested from server
'host' => 'localhost',
'port' => 3306, // optional
'username' => 'user',
'password' => 'pass',
'db_name' => 'my_db',
'charset' => 'utf8', // optional
],
'production' => [
'adapter' => 'mysql',
'host' => 'production_host',
'username' => 'user',
'password' => 'pass',
'db_name' => 'my_production_db',
'charset' => 'utf8',
],
],
'default_environment ' => 'local',
];
As you know and as you can see, in php configuration file you can use __DIR__
as token for identifying actual directory (directory where configuration file is stored). In other types of configuration files you can use special token %%ACTUAL_DIR%%
which is replaced with path to configuration file directory.
phoenix.yml or phoenix.yaml
log_table_name: my_phoenix_log
migration_dirs:
first: '%%ACTUAL_DIR%%/first'
second: '%%ACTUAL_DIR%%/second'
environments:
local:
adapter: mysql
version: '5.7.0' # optional - if not set it is requested from server
host: localhost
port: 3306 # optional
username: user
password: pass
db_name: my_db
charset: utf8 # optional
production:
adapter: mysql
host: production_host
username: user
password: pass
db_name: my_production_db
charset: utf8
default_environment: local
phoenix.neon
log_table_name: my_phoenix_log
migration_dirs:
first: '%%ACTUAL_DIR%%/first'
second: '%%ACTUAL_DIR%%/second'
environments:
local:
adapter: mysql
version: '5.7.0' # optional - if not set it is requested from server
host: localhost
port: 3306 # optional
username: user
password: pass
db_name: my_db
charset: utf8 # optional
production:
adapter: mysql
host: production_host
username: user
password: pass
db_name: my_production_db
charset: utf8
default_environment: local
Configuration files of types yml and neon are pretty similar. The only difference is that in yml type you have to use 2 or 4 spaces for indentation, but no tabs, while in neon type the tabs are allowed.
phoenix.json
{
"log_table_name": "my_phoenix_log",
"migration_dirs": {
"first": "%%ACTUAL_DIR%%/first",
"second": "%%ACTUAL_DIR%%/second"
},
"environments": {
"local": {
"adapter": "mysql",
"version": "5.7.0", // optional - if not set it is requested from server
"host": "localhost",
"port": "3306", // optional
"username": "user",
"password": "pass",
"db_name": "my_db",
"charset": "utf8"
},
"production": {
"adapter": "mysql",
"host": "production_host",
"username": "user",
"password": "pass",
"db_name": "my_production_db",
"charset": "utf8"
}
},
"default_environment": "local"
}