-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathconfig.php
235 lines (207 loc) · 6.05 KB
/
config.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
<?php namespace Laravel; defined('DS') or die('No direct script access.');
class Config {
/**
* All of the loaded configuration items.
*
* The configuration arrays are keyed by their owning bundle and file.
*
* @var array
*/
public static $items = array();
/**
* A cache of the parsed configuration items.
*
* @var array
*/
public static $cache = array();
/**
* The configuration loader event name.
*
* @var string
*/
const loader = 'laravel.config.loader';
/**
* Determine if a configuration item or file exists.
*
* <code>
* // Determine if the "session" configuration file exists
* $exists = Config::has('session');
*
* // Determine if the "timezone" option exists in the configuration
* $exists = Config::has('application.timezone');
* </code>
*
* @param string $key
* @return bool
*/
public static function has($key)
{
return ! is_null(static::get($key));
}
/**
* Get a configuration item.
*
* If no item is requested, the entire configuration array will be returned.
*
* <code>
* // Get the "session" configuration array
* $session = Config::get('session');
*
* // Get a configuration item from a bundle's configuration file
* $name = Config::get('admin::names.first');
*
* // Get the "timezone" option from the "application" configuration file
* $timezone = Config::get('application.timezone');
* </code>
*
* @param string $key
* @param mixed $default
* @return array
*/
public static function get($key, $default = null)
{
list($bundle, $file, $item) = static::parse($key);
if ( ! static::load($bundle, $file)) return value($default);
$items = static::$items[$bundle][$file];
// If a specific configuration item was not requested, the key will be null,
// meaning we'll return the entire array of configuration items from the
// requested configuration file. Otherwise we can return the item.
if (is_null($item))
{
return $items;
}
else
{
return array_get($items, $item, $default);
}
}
/**
* Set a configuration item's value.
*
* <code>
* // Set the "session" configuration array
* Config::set('session', $array);
*
* // Set a configuration option that belongs by a bundle
* Config::set('admin::names.first', 'Taylor');
*
* // Set the "timezone" option in the "application" configuration file
* Config::set('application.timezone', 'UTC');
* </code>
*
* @param string $key
* @param mixed $value
* @return void
*/
public static function set($key, $value)
{
list($bundle, $file, $item) = static::parse($key);
static::load($bundle, $file);
// If the item is null, it means the developer wishes to set the entire
// configuration array to a given value, so we will pass the entire
// array for the bundle into the array_set method.
if (is_null($item))
{
array_set(static::$items[$bundle], $file, $value);
}
else
{
array_set(static::$items[$bundle][$file], $item, $value);
}
}
/**
* Parse a key and return its bundle, file, and key segments.
*
* Configuration items are named using the {bundle}::{file}.{item} convention.
*
* @param string $key
* @return array
*/
protected static function parse($key)
{
// First, we'll check the keyed cache of configuration items, as this will
// be the fastest method of retrieving the configuration option. After an
// item is parsed, it is always stored in the cache by its key.
if (array_key_exists($key, static::$cache))
{
return static::$cache[$key];
}
$bundle = Bundle::name($key);
$segments = explode('.', Bundle::element($key));
// If there are not at least two segments in the array, it means that the
// developer is requesting the entire configuration array to be returned.
// If that is the case, we'll make the item field "null".
if (count($segments) >= 2)
{
$parsed = array($bundle, $segments[0], implode('.', array_slice($segments, 1)));
}
else
{
$parsed = array($bundle, $segments[0], null);
}
return static::$cache[$key] = $parsed;
}
/**
* Load all of the configuration items from a configuration file.
*
* @param string $bundle
* @param string $file
* @return bool
*/
public static function load($bundle, $file)
{
if (isset(static::$items[$bundle][$file])) return true;
// We allow a "config.loader" event to be registered which is responsible for
// returning an array representing the configuration for the bundle and file
// requested. This allows many types of config "drivers".
$config = Event::first(static::loader, func_get_args());
// If configuration items were actually found for the bundle and file, we
// will add them to the configuration array and return true, otherwise
// we will return false indicating the file was not found.
if (count($config) > 0)
{
static::$items[$bundle][$file] = $config;
}
return isset(static::$items[$bundle][$file]);
}
/**
* Load the configuration items from a configuration file.
*
* @param string $bundle
* @param string $file
* @return array
*/
public static function file($bundle, $file)
{
$config = array();
// Configuration files cascade. Typically, the bundle configuration array is
// loaded first, followed by the environment array, providing the convenient
// cascading of configuration options across environments.
foreach (static::paths($bundle) as $directory)
{
if ($directory !== '' and file_exists($path = $directory.$file.EXT))
{
$config = array_merge($config, require $path);
}
}
return $config;
}
/**
* Get the array of configuration paths that should be searched for a bundle.
*
* @param string $bundle
* @return array
*/
protected static function paths($bundle)
{
$paths[] = Bundle::path($bundle).'config/';
// Configuration files can be made specific for a given environment. If an
// environment has been set, we will merge the environment configuration
// in last, so that it overrides all other options.
if ( ! is_null(Request::env()))
{
$paths[] = $paths[count($paths) - 1].Request::env().'/';
}
return $paths;
}
}