@@ -10,20 +10,57 @@ to store certain credentials outside of your project code. Database configuratio
10
10
is one such example. The flexibility of the Symfony service container allows
11
11
you to easily do this.
12
12
13
- Environment Variables
14
- ---------------------
13
+ Environment Variables as Default Parameter Values
14
+ -------------------------------------------------
15
15
16
- Symfony will grab any environment variable prefixed with `` SYMFONY__ `` and
17
- set it as a parameter in the service container. Some transformations are
18
- applied to the resulting parameter name:
16
+ Any parameters used in the service container can have their default values be set
17
+ using environment variables prefixed with `` SYMFONY__ `` and where dots in
18
+ parameter names are replaced by double underscores.
19
19
20
- * ``SYMFONY__ `` prefix is removed;
21
- * Parameter name is lowercased;
22
- * Double underscores are replaced with a period, as a period is not
23
- a valid character in an environment variable name.
20
+ For example, if you have a configuration that reads as such:
24
21
25
- For example, if you're using Apache, environment variables can be set using
26
- the following ``VirtualHost `` configuration:
22
+ .. configuration-block ::
23
+
24
+ .. code-block :: yaml
25
+
26
+ doctrine :
27
+ dbal :
28
+ driver : pdo_mysql
29
+ dbname : symfony_project
30
+ user : ' %database.user%'
31
+ password : ' %database.password%'
32
+
33
+ .. code-block :: xml
34
+
35
+ <!-- xmlns:doctrine="http://symfony.com/schema/dic/doctrine" -->
36
+ <!-- xsi:schemaLocation="http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd"> -->
37
+
38
+ <doctrine : config >
39
+ <doctrine : dbal
40
+ driver =" pdo_mysql"
41
+ dbname =" symfony_project"
42
+ user =" %database.user%"
43
+ password =" %database.password%"
44
+ />
45
+ </doctrine : config >
46
+
47
+ .. code-block :: php
48
+
49
+ $container->loadFromExtension('doctrine', array(
50
+ 'dbal' => array(
51
+ 'driver' => 'pdo_mysql',
52
+ 'dbname' => 'symfony_project',
53
+ 'user' => '%database.user%',
54
+ 'password' => '%database.password%',
55
+ )
56
+ ));
57
+
58
+ Then you can set the default value of the ``database.user `` and ``database.password ``
59
+ parameters by setting the ``SYMFONY__DATABASE__USER `` and
60
+ ``SYMFONY__DATABASE__PASSWORD `` environment variables respectively.
61
+
62
+ If you're using Apache, those can be set using the following ``VirtualHost ``
63
+ configuration:
27
64
28
65
.. code-block :: apache
29
66
@@ -55,23 +92,29 @@ the following ``VirtualHost`` configuration:
55
92
$ export SYMFONY__DATABASE__USER=user
56
93
$ export SYMFONY__DATABASE__PASSWORD=secret
57
94
58
- Now that you have declared an environment variable, it will be present
59
- in the PHP ``$_SERVER `` global variable. Symfony then automatically sets all
60
- ``$_SERVER `` variables prefixed with ``SYMFONY__ `` as parameters in the service
61
- container.
95
+ ``SYMFONY__ `` prefixed environment variables are ignored when their corresponding
96
+ parameters are set in your configuration files. Note also that their values are
97
+ inlined into dumped service containers so that changing them at runtime won't
98
+ affect your service container unless you recompile it afterwards.
99
+
100
+ Reference Environment Variables at Run-time
101
+ -------------------------------------------
62
102
63
- You can now reference these parameters wherever you need them.
103
+ You can reference any environment variables in your service container by using
104
+ special parameters named after the variables you want to use encapsed between
105
+ ``env(...) ``.
106
+
107
+ For example, if you want to use the value of the ``DATABASE_HOST `` environment
108
+ variable into you service container configuration, you can reference it using
109
+ ``%env(DATABASE_HOST)% ``:
64
110
65
111
.. configuration-block ::
66
112
67
113
.. code-block :: yaml
68
114
69
115
doctrine :
70
116
dbal :
71
- driver : pdo_mysql
72
- dbname : symfony_project
73
- user : ' %database.user%'
74
- password : ' %database.password%'
117
+ host : ' %env(DATABASE_HOST)%'
75
118
76
119
.. code-block :: xml
77
120
@@ -80,24 +123,51 @@ You can now reference these parameters wherever you need them.
80
123
81
124
<doctrine : config >
82
125
<doctrine : dbal
83
- driver =" pdo_mysql"
84
- dbname =" symfony_project"
85
- user =" %database.user%"
86
- password =" %database.password%"
126
+ host =" %env(DATABASE_HOST)%"
87
127
/>
88
128
</doctrine : config >
89
129
90
130
.. code-block :: php
91
131
92
132
$container->loadFromExtension('doctrine', array(
93
133
'dbal' => array(
94
- 'driver' => 'pdo_mysql',
95
- 'dbname' => 'symfony_project',
96
- 'user' => '%database.user%',
97
- 'password' => '%database.password%',
134
+ 'host' => '%env(DATABASE_HOST)%',
98
135
)
99
136
));
100
137
138
+ ``env(...) `` parameters can have default values be set and used whenever their
139
+ corresponding environment variables are not found:
140
+
141
+ .. configuration-block ::
142
+
143
+ .. code-block :: yaml
144
+
145
+ parameters :
146
+ env(DATABASE_HOST) : localhost
147
+
148
+ .. code-block :: xml
149
+
150
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
151
+ <container xmlns =" http://symfony.com/schema/dic/services"
152
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
153
+ xsi : schemaLocation =" http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd" >
154
+
155
+ <parameters >
156
+ <parameter key =" env(DATABASE_HOST)" >localhost</parameter >
157
+ </parameters >
158
+ </container >
159
+
160
+ .. code-block :: php
161
+
162
+ $container->setParameter('env(DATABASE_HOST)', 'localhost');
163
+
164
+ Unlike ``SYMFONY__ `` prefixed environment variables, ``env(...) `` parameters are
165
+ truned into run-time environment variable reads, so that dumped containers can
166
+ be reconfigured dynamically even after being compiled.
167
+
168
+ .. versionadded :: 3.2
169
+ ``env(...) `` parameters were introduced in Symfony 3.2.
170
+
101
171
Constants
102
172
---------
103
173
0 commit comments