@@ -19,7 +19,7 @@ composer require lamoda/multi-env
19
19
20
20
## Usage
21
21
22
- ### Library usage to work in not multitenant environment (could be useful in development mode)
22
+ ### Library usage examples to work in not multitenant environment (could be useful in development mode)
23
23
24
24
``` php
25
25
<?php
@@ -35,12 +35,13 @@ EnvProviderDecorator::init($strategy);
35
35
EnvProviderDecorator::getEnv('TEST_ENV');
36
36
```
37
37
38
- ### Library usage to work in multitenant environment
38
+ ### Library usage examples to work in multitenant environment
39
39
40
40
``` php
41
41
<?php
42
42
43
43
use \Lamoda\MultiEnv\Strategy\HostBasedEnvResolvingStrategy;
44
+ use \Lamoda\MultiEnv\Strategy\FileBasedEnvResolvingStrategy;
44
45
use \Lamoda\MultiEnv\Decorator\EnvProviderDecorator;
45
46
46
47
/*
@@ -51,10 +52,57 @@ $strategy = new HostBasedEnvResolvingStrategy($hostDetector, $envFormatter);
51
52
EnvProviderDecorator::init($strategy);
52
53
53
54
/*
54
- * Will search env with some specific prefix/postfix resolved by HostDetectorInterface
55
+ * Will search env with some specific prefix/suffix resolved by HostDetectorInterface
55
56
* For example host_id__TEST_ENV
56
57
*/
57
58
EnvProviderDecorator::getEnv('TEST_ENV');
59
+
60
+ /*
61
+ * Pass as first param one of available HostDetectorInterface implementations which detect HostId for current request
62
+ * Pass as second param one of available EnvFileReaderInterface (for now available only DotEnvFileReaderAdapter) which load specific env file
63
+ * Pass as third param another EnvResolvingStrategy which find specific env variable from loaded envs
64
+ */
65
+ $strategy = new FileBasedEnvResolvingStrategy($hostDetector, $envFileReader, $envResolvingStrategy);
66
+ EnvProviderDecorator::init($strategy);
67
+ EnvProviderDecorator::getEnv('TEST_ENV');
68
+ ```
69
+
70
+ ### Library set up by build in factory
71
+
72
+ 1 . Library set up for work with env in file stored in different directories
73
+ ``` php
74
+ <?php
75
+
76
+ use \Lamoda\MultiEnv\Builder\FileBasedEnvResolvingStrategyBuilder;
77
+ use \Lamoda\MultiEnv\Decorator\EnvProviderDecorator;
78
+
79
+ /*
80
+ * Result strategy resolve hostId from server headers or cli args
81
+ * Then load all envs from .env file stored by path /var/envs/*hostId*
82
+ * Read TEST_ENV env variable
83
+ */
84
+ $strategy = FileBasedEnvResolvingStrategyBuilder::buildStrategy('HTTP_X_HOST_ID', 'host_id', '.env', '/var/envs');
85
+ EnvProviderDecorator::init($strategy);
86
+
87
+ EnvProviderDecorator::getEnv('TEST_ENV');
88
+ ```
89
+ 2 . Library set up for work with env with prefixes
90
+ ``` php
91
+ <?php
92
+
93
+ use \Lamoda\MultiEnv\Builder\HostBasedEnvResolvingStrategyBuilder;
94
+ use \Lamoda\MultiEnv\Decorator\EnvProviderDecorator;
95
+
96
+ /*
97
+ * Result strategy resolve hostId from server headers or cli args
98
+ * Add prefix to original env name. Result be like *hostId*___TEST_ENV
99
+ * Replace all '-' char to '_' case '-' illegal in env variable name
100
+ * Read *host_id*___TEST_ENV env variable
101
+ */
102
+ $strategy = HostBasedEnvResolvingStrategyBuilder::buildStrategy('HTTP_X_HOST_ID', 'host_id', '___');
103
+ EnvProviderDecorator::init($strategy);
104
+
105
+ EnvProviderDecorator::getEnv('TEST_ENV');
58
106
```
59
107
60
108
### Library set up with multiple strategy
@@ -67,7 +115,7 @@ use \Lamoda\MultiEnv\Strategy\HostBasedEnvResolvingStrategy;
67
115
use \Lamoda\MultiEnv\HostDetector\FirstSuccessfulHostDetector;
68
116
use \Lamoda\MultiEnv\HostDetector\CliArgsBasedHostDetector;
69
117
use \Lamoda\MultiEnv\HostDetector\ServerHeadersBasedHostDetector;
70
- use \Lamoda\MultiEnv\Formatter\PrefixEnvNameFormatter ;
118
+ use \Lamoda\MultiEnv\Formatter\PrefixAppendFormatter ;
71
119
use \Lamoda\MultiEnv\HostDetector\Factory\GetOptAdapterFactory;
72
120
use \Lamoda\MultiEnv\Decorator\EnvProviderDecorator;
73
121
@@ -77,7 +125,7 @@ $hostBasedEnvResolvingStrategy = new HostBasedEnvResolvingStrategy(
77
125
new ServerHeadersBasedHostDetector('HTTP_X_TEST_HEADER'),
78
126
new CliArgsBasedHostDetector('host_id', GetOptAdapterFactory::build())
79
127
]),
80
- new PrefixEnvNameFormatter ('___')
128
+ new PrefixAppendFormatter ('___')
81
129
);
82
130
83
131
$firstSuccessfulStrategy = new FirstSuccessfulEnvResolvingStrategy([
@@ -88,7 +136,7 @@ EnvProviderDecorator::init($firstSuccessfulStrategy);
88
136
89
137
/*
90
138
* Try find original env 'TEST_ENV' first.
91
- * If original env not found than try to find env with some specific prefix/postfix resolved by HostDetectorInterface.
139
+ * If original env not found than try to find env with some specific prefix/suffix resolved by HostDetectorInterface.
92
140
* For example host_id__TEST_ENV
93
141
*/
94
142
EnvProviderDecorator::getEnv('TEST_ENV');
@@ -143,17 +191,66 @@ EnvProviderDecorator::getEnv('TEST_ENV');
143
191
$hostId = $firstSuccessfulHostDetector->getCurrentHost();
144
192
```
145
193
146
- ## Available EnvNameFormatterInterface implementations
147
- 1. __\Lamoda\MultiEnv\Formatter\PrefixEnvNameFormatter__ - format env name. Combine __original env name__, __delimiter__,
148
- __host id__ in order \*__host id__\*, \*__delimiter__\*, \*__original env name__\*
194
+ ## Available FormatterInterface implementations
195
+ 1. __\Lamoda\MultiEnv\Formatter\PrefixAppendFormatter__ - append prefix and delimiter to original string.
196
+ Combine __original string__, __delimiter__,__host id__ in order
197
+ \*__host id__\*, \*__delimiter__\*, \*__original string__\*
149
198
```php
150
199
<?php
151
200
152
- use \Lamoda\MultiEnv\Formatter\PrefixEnvNameFormatter;
201
+ use \Lamoda\MultiEnv\Formatter\PrefixAppendFormatter;
202
+ use \Lamoda\MultiEnv\Model\HostId;
203
+ use \Lamoda\MultiEnv\Formatter\Exception\FormatterException;
204
+
205
+ $formatter = new PrefixAppendFormatter('__');
206
+ // Throw FormatterException if passed empty originalName
207
+ $formatterName = $formatter->formatName('originalEnvName', new HostId('test_host'));
208
+ ```
209
+ 2. __\Lamoda\MultiEnv\Formatter\SuffixAppendFormatter__ - append suffix and delimiter to original string.
210
+ Combine __original string__, __delimiter__,__host id__ in order
211
+ \*__original string__\*, \*__delimiter__\*, \*__host id__\*
212
+ ```php
213
+ <?php
214
+
215
+ use \Lamoda\MultiEnv\Formatter\SuffixAppendFormatter;
216
+ use \Lamoda\MultiEnv\Model\HostId;
217
+ use \Lamoda\MultiEnv\Formatter\Exception\FormatterException;
218
+
219
+ $formatter = new SuffixAppendFormatter('___');
220
+ // Throw FormatterException if passed empty originalName
221
+ $formattedName = $formatter->formatName('originalEnvName', new HostId('test_host'));
222
+ ```
223
+ 3. __\Lamoda\MultiEnv\Formatter\CharReplaceFormatter__ - act like __str_replace__ in PHP. Could be useful to replace illegal
224
+ char __'-'__ to __'\_\'__ when you access to env variable
225
+ ```php
226
+ <?php
227
+
228
+ use \Lamoda\MultiEnv\Formatter\CharReplaceFormatter;
153
229
use \Lamoda\MultiEnv\Model\HostId;
154
230
use \Lamoda\MultiEnv\Formatter\Exception\FormatterException;
155
231
156
- $formatter = new PrefixEnvNameFormatter('__');
157
- // Throw FormatterException if passed empty originalEnvName
158
- $formatterName = $formatter->formatEnvName('originalEnvName', new HostId('test_host'));
232
+ $formatter = new CharReplaceFormatter('-', '_');
233
+ /*
234
+ * Throw FormatterException if passed empty originalName
235
+ * return 'original_env_name'
236
+ */
237
+ $formattedName = $formatter->formatName('original-env-name', new HostId('testHost'));
159
238
```
239
+
240
+ 4. __\Lamoda\MultiEnv\Formatter\FormatterPipeline__ - aggregate few formatters. Iterate through them and apply each to original stirng
241
+ ```php
242
+ <?php
243
+
244
+ use \Lamoda\MultiEnv\Formatter\FormatterPipeline;
245
+ use \Lamoda\MultiEnv\Formatter\SuffixAppendFormatter;
246
+ use \Lamoda\MultiEnv\Formatter\CharReplaceFormatter;
247
+ use \Lamoda\MultiEnv\Model\HostId;
248
+
249
+ $formatter = new FormatterPipeline([
250
+ new SuffixAppendFormatter('-'),
251
+ new CharReplaceFormatter('-', '_')
252
+ ]);
253
+
254
+ // return 'originalEnvName_test_host_id'
255
+ $formattedName = $formatter->formatName('originalEnvName', new HostId('test-host-id'));
256
+ ```
0 commit comments