Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace Dotenv;
6
 
7
use Dotenv\Exception\InvalidPathException;
8
use Dotenv\Loader\Loader;
9
use Dotenv\Loader\LoaderInterface;
10
use Dotenv\Parser\Parser;
11
use Dotenv\Parser\ParserInterface;
12
use Dotenv\Repository\Adapter\ArrayAdapter;
13
use Dotenv\Repository\Adapter\PutenvAdapter;
14
use Dotenv\Repository\RepositoryBuilder;
15
use Dotenv\Repository\RepositoryInterface;
16
use Dotenv\Store\StoreBuilder;
17
use Dotenv\Store\StoreInterface;
18
use Dotenv\Store\StringStore;
19
 
20
class Dotenv
21
{
22
    /**
23
     * The store instance.
24
     *
25
     * @var \Dotenv\Store\StoreInterface
26
     */
27
    private $store;
28
 
29
    /**
30
     * The parser instance.
31
     *
32
     * @var \Dotenv\Parser\ParserInterface
33
     */
34
    private $parser;
35
 
36
    /**
37
     * The loader instance.
38
     *
39
     * @var \Dotenv\Loader\LoaderInterface
40
     */
41
    private $loader;
42
 
43
    /**
44
     * The repository instance.
45
     *
46
     * @var \Dotenv\Repository\RepositoryInterface
47
     */
48
    private $repository;
49
 
50
    /**
51
     * Create a new dotenv instance.
52
     *
53
     * @param \Dotenv\Store\StoreInterface           $store
54
     * @param \Dotenv\Parser\ParserInterface         $parser
55
     * @param \Dotenv\Loader\LoaderInterface         $loader
56
     * @param \Dotenv\Repository\RepositoryInterface $repository
57
     *
58
     * @return void
59
     */
60
    public function __construct(
61
        StoreInterface $store,
62
        ParserInterface $parser,
63
        LoaderInterface $loader,
64
        RepositoryInterface $repository
65
    ) {
66
        $this->store = $store;
67
        $this->parser = $parser;
68
        $this->loader = $loader;
69
        $this->repository = $repository;
70
    }
71
 
72
    /**
73
     * Create a new dotenv instance.
74
     *
75
     * @param \Dotenv\Repository\RepositoryInterface $repository
76
     * @param string|string[]                        $paths
77
     * @param string|string[]|null                   $names
78
     * @param bool                                   $shortCircuit
79
     * @param string|null                            $fileEncoding
80
     *
81
     * @return \Dotenv\Dotenv
82
     */
83
    public static function create(RepositoryInterface $repository, $paths, $names = null, bool $shortCircuit = true, string $fileEncoding = null)
84
    {
85
        $builder = $names === null ? StoreBuilder::createWithDefaultName() : StoreBuilder::createWithNoNames();
86
 
87
        foreach ((array) $paths as $path) {
88
            $builder = $builder->addPath($path);
89
        }
90
 
91
        foreach ((array) $names as $name) {
92
            $builder = $builder->addName($name);
93
        }
94
 
95
        if ($shortCircuit) {
96
            $builder = $builder->shortCircuit();
97
        }
98
 
99
        return new self($builder->fileEncoding($fileEncoding)->make(), new Parser(), new Loader(), $repository);
100
    }
101
 
102
    /**
103
     * Create a new mutable dotenv instance with default repository.
104
     *
105
     * @param string|string[]      $paths
106
     * @param string|string[]|null $names
107
     * @param bool                 $shortCircuit
108
     * @param string|null          $fileEncoding
109
     *
110
     * @return \Dotenv\Dotenv
111
     */
112
    public static function createMutable($paths, $names = null, bool $shortCircuit = true, string $fileEncoding = null)
113
    {
114
        $repository = RepositoryBuilder::createWithDefaultAdapters()->make();
115
 
116
        return self::create($repository, $paths, $names, $shortCircuit, $fileEncoding);
117
    }
118
 
119
    /**
120
     * Create a new mutable dotenv instance with default repository with the putenv adapter.
121
     *
122
     * @param string|string[]      $paths
123
     * @param string|string[]|null $names
124
     * @param bool                 $shortCircuit
125
     * @param string|null          $fileEncoding
126
     *
127
     * @return \Dotenv\Dotenv
128
     */
129
    public static function createUnsafeMutable($paths, $names = null, bool $shortCircuit = true, string $fileEncoding = null)
130
    {
131
        $repository = RepositoryBuilder::createWithDefaultAdapters()
132
            ->addAdapter(PutenvAdapter::class)
133
            ->make();
134
 
135
        return self::create($repository, $paths, $names, $shortCircuit, $fileEncoding);
136
    }
137
 
138
    /**
139
     * Create a new immutable dotenv instance with default repository.
140
     *
141
     * @param string|string[]      $paths
142
     * @param string|string[]|null $names
143
     * @param bool                 $shortCircuit
144
     * @param string|null          $fileEncoding
145
     *
146
     * @return \Dotenv\Dotenv
147
     */
148
    public static function createImmutable($paths, $names = null, bool $shortCircuit = true, string $fileEncoding = null)
149
    {
150
        $repository = RepositoryBuilder::createWithDefaultAdapters()->immutable()->make();
151
 
152
        return self::create($repository, $paths, $names, $shortCircuit, $fileEncoding);
153
    }
154
 
155
    /**
156
     * Create a new immutable dotenv instance with default repository with the putenv adapter.
157
     *
158
     * @param string|string[]      $paths
159
     * @param string|string[]|null $names
160
     * @param bool                 $shortCircuit
161
     * @param string|null          $fileEncoding
162
     *
163
     * @return \Dotenv\Dotenv
164
     */
165
    public static function createUnsafeImmutable($paths, $names = null, bool $shortCircuit = true, string $fileEncoding = null)
166
    {
167
        $repository = RepositoryBuilder::createWithDefaultAdapters()
168
            ->addAdapter(PutenvAdapter::class)
169
            ->immutable()
170
            ->make();
171
 
172
        return self::create($repository, $paths, $names, $shortCircuit, $fileEncoding);
173
    }
174
 
175
    /**
176
     * Create a new dotenv instance with an array backed repository.
177
     *
178
     * @param string|string[]      $paths
179
     * @param string|string[]|null $names
180
     * @param bool                 $shortCircuit
181
     * @param string|null          $fileEncoding
182
     *
183
     * @return \Dotenv\Dotenv
184
     */
185
    public static function createArrayBacked($paths, $names = null, bool $shortCircuit = true, string $fileEncoding = null)
186
    {
187
        $repository = RepositoryBuilder::createWithNoAdapters()->addAdapter(ArrayAdapter::class)->make();
188
 
189
        return self::create($repository, $paths, $names, $shortCircuit, $fileEncoding);
190
    }
191
 
192
    /**
193
     * Parse the given content and resolve nested variables.
194
     *
195
     * This method behaves just like load(), only without mutating your actual
196
     * environment. We do this by using an array backed repository.
197
     *
198
     * @param string $content
199
     *
200
     * @throws \Dotenv\Exception\InvalidFileException
201
     *
202
     * @return array<string,string|null>
203
     */
204
    public static function parse(string $content)
205
    {
206
        $repository = RepositoryBuilder::createWithNoAdapters()->addAdapter(ArrayAdapter::class)->make();
207
 
208
        $phpdotenv = new self(new StringStore($content), new Parser(), new Loader(), $repository);
209
 
210
        return $phpdotenv->load();
211
    }
212
 
213
    /**
214
     * Read and load environment file(s).
215
     *
216
     * @throws \Dotenv\Exception\InvalidPathException|\Dotenv\Exception\InvalidEncodingException|\Dotenv\Exception\InvalidFileException
217
     *
218
     * @return array<string,string|null>
219
     */
220
    public function load()
221
    {
222
        $entries = $this->parser->parse($this->store->read());
223
 
224
        return $this->loader->load($this->repository, $entries);
225
    }
226
 
227
    /**
228
     * Read and load environment file(s), silently failing if no files can be read.
229
     *
230
     * @throws \Dotenv\Exception\InvalidEncodingException|\Dotenv\Exception\InvalidFileException
231
     *
232
     * @return array<string,string|null>
233
     */
234
    public function safeLoad()
235
    {
236
        try {
237
            return $this->load();
238
        } catch (InvalidPathException $e) {
239
            // suppressing exception
240
            return [];
241
        }
242
    }
243
 
244
    /**
245
     * Required ensures that the specified variables exist, and returns a new validator object.
246
     *
247
     * @param string|string[] $variables
248
     *
249
     * @return \Dotenv\Validator
250
     */
251
    public function required($variables)
252
    {
253
        return (new Validator($this->repository, (array) $variables))->required();
254
    }
255
 
256
    /**
257
     * Returns a new validator object that won't check if the specified variables exist.
258
     *
259
     * @param string|string[] $variables
260
     *
261
     * @return \Dotenv\Validator
262
     */
263
    public function ifPresent($variables)
264
    {
265
        return new Validator($this->repository, (array) $variables);
266
    }
267
}