1 | <?php |
||
65 | class Loader |
||
66 | { |
||
67 | /** |
||
68 | * The path to the package's default configuration file. |
||
69 | * |
||
70 | * @var string |
||
71 | */ |
||
72 | const CONFIG_PATH = __DIR__ . '/../../config/redis-sentinel.php'; |
||
73 | |||
74 | /** |
||
75 | * Flag that indicates whether the package should check that the framework |
||
76 | * runs full Laravel before loading Horizon support. |
||
77 | * |
||
78 | * Horizon does not yet officially support Lumen applications, so the |
||
79 | * package will not configure itself for Horizon in Lumen applications by |
||
80 | * default. Set this value to TRUE in bootstrap/app.php to short-circuit |
||
81 | * the check and attempt to load Horizon support anyway. This provides for |
||
82 | * testing unofficial Lumen implementations. Use at your own risk. |
||
83 | * |
||
84 | * @var bool |
||
85 | */ |
||
86 | public static $ignoreHorizonRequirements = false; |
||
87 | |||
88 | /** |
||
89 | * Indicates whether the current application runs the Lumen framework. |
||
90 | * |
||
91 | * @var bool |
||
92 | */ |
||
93 | public $isLumen; |
||
94 | |||
95 | /** |
||
96 | * Indicates whether the current application supports sessions. |
||
97 | * |
||
98 | * @var bool |
||
99 | */ |
||
100 | public $supportsSessions; |
||
101 | |||
102 | /** |
||
103 | * Indicates whether the package should override Laravel's standard Redis |
||
104 | * API ("Redis" facade and "redis" service binding). |
||
105 | * |
||
106 | * @var bool |
||
107 | */ |
||
108 | public $shouldOverrideLaravelRedisApi; |
||
109 | |||
110 | /** |
||
111 | * Indicates whether Laravel Horizon is installed. Currently FALSE in Lumen. |
||
112 | * |
||
113 | * @var bool |
||
114 | */ |
||
115 | public $horizonAvailable; |
||
116 | |||
117 | /** |
||
118 | * Indicates whether the package should integrate with Laravel Horizon |
||
119 | * based on availability and the value of the "horizon.driver" directive. |
||
120 | * |
||
121 | * @var bool |
||
122 | */ |
||
123 | public $shouldIntegrateHorizon; |
||
124 | |||
125 | /** |
||
126 | * The current Laravel or Lumen application instance that provides context |
||
127 | * and services used to load the appropriate configuration. |
||
128 | * |
||
129 | * @var LaravelApplication|LumenApplication |
||
130 | */ |
||
131 | private $app; |
||
132 | |||
133 | /** |
||
134 | * Used to fetch and set application configuration values. |
||
135 | * |
||
136 | * @var \Illuminate\Contracts\Config\Repository |
||
137 | */ |
||
138 | private $config; |
||
139 | |||
140 | /** |
||
141 | * Contains the set of configuration values used to configure the package |
||
142 | * as loaded from "config/redis-sentinel.php". Empty when the application's |
||
143 | * standard config files provide all the values needed to configure the |
||
144 | * package (such as when a developer provides a custom config). |
||
145 | * |
||
146 | * @var array |
||
147 | */ |
||
148 | private $packageConfig; |
||
149 | |||
150 | /** |
||
151 | * Initialize the configuration loader. Any actual loading occurs when |
||
152 | * calling the 'loadConfiguration()' method. |
||
153 | * |
||
154 | * @param LaravelApplication|LumenApplication $app The current application |
||
155 | * instance that provides context and services needed to load the |
||
156 | * appropriate configuration. |
||
157 | */ |
||
158 | public function __construct($app) |
||
170 | |||
171 | /** |
||
172 | * Create an instance of the loader and load the configuration in one step. |
||
173 | * |
||
174 | * @param LaravelApplication|LumenApplication $app The current application |
||
175 | * instance that provides context and services needed to load the |
||
176 | * appropriate configuration. |
||
177 | * |
||
178 | * @return self An initialized instance of this class |
||
179 | */ |
||
180 | public static function load($app) |
||
187 | |||
188 | /** |
||
189 | * Load the package configuration. |
||
190 | * |
||
191 | * @return void |
||
192 | */ |
||
193 | public function loadConfiguration() |
||
207 | |||
208 | /** |
||
209 | * Sets the Horizon Redis Sentinel connection configuration. |
||
210 | * |
||
211 | * @return void |
||
212 | */ |
||
213 | public function loadHorizonConfiguration() |
||
231 | |||
232 | /** |
||
233 | * Get the version number of the current Laravel or Lumen application. |
||
234 | * |
||
235 | * @return string The version as declared by the framework. |
||
236 | */ |
||
237 | public function getApplicationVersion() |
||
245 | |||
246 | /** |
||
247 | * Fetch the specified application configuration value. |
||
248 | * |
||
249 | * This helper method enables the package's service providers to get config |
||
250 | * values without having to resolve the config service from the container. |
||
251 | * |
||
252 | * @param string|array $key The key(s) for the value(s) to fetch. |
||
253 | * @param mixed $default Returned if the key does not exist. |
||
254 | * |
||
255 | * @return mixed The requested configuration value or the provided default |
||
256 | * if the key does not exist. |
||
257 | */ |
||
258 | public function get($key, $default = null) |
||
262 | |||
263 | /** |
||
264 | * Set the specified application configuration value. |
||
265 | * |
||
266 | * This helper method enables the package's service providers to set config |
||
267 | * values without having to resolve the config service from the container. |
||
268 | * |
||
269 | * @param string|array $key The key of the value or a tree of values as |
||
270 | * an associative array. |
||
271 | * @param mixed $value The value to set for the specified key. |
||
272 | * |
||
273 | * @return void |
||
274 | */ |
||
275 | public function set($key, $value = null) |
||
279 | |||
280 | /** |
||
281 | * Determine whether the package service provider should immediately boot |
||
282 | * the package services following the registration phase. |
||
283 | * |
||
284 | * Some third-party packages contain service providers that don't follow |
||
285 | * Laravel's boostrapping convention. These may reference this package's |
||
286 | * Sentinel drivers (cache, session, etc.) during the registration phase |
||
287 | * before this service provider finishes binding those in the boot phase |
||
288 | * afterward. An application can overcome the issue by setting the value |
||
289 | * of "redis-sentinel.auto_boot" to TRUE so that this provider boots the |
||
290 | * package's drivers during the registration phase. |
||
291 | * |
||
292 | * @return bool TRUE if the package is explicitly configured to auto-boot. |
||
293 | */ |
||
294 | public function shouldAutoBoot() |
||
298 | |||
299 | /** |
||
300 | * Determine if the package should automatically configure itself. |
||
301 | * |
||
302 | * Developers may set the value of "redis-sentinel.load_config" to FALSE to |
||
303 | * disable the package's automatic configuration. This class also sets this |
||
304 | * value to FALSE after loading the package configuration to skip the auto- |
||
305 | * configuration when the application cached its configuration values (via |
||
306 | * "artisan config:cache", for example). |
||
307 | * |
||
308 | * @return bool TRUE if the package should load its configuration |
||
309 | */ |
||
310 | protected function shouldLoadConfiguration() |
||
318 | |||
319 | /** |
||
320 | * Configure the Lumen components that this package depends on. |
||
321 | * |
||
322 | * Lumen lazily loads many of its components. We must instruct Lumen to |
||
323 | * load the configuration for components that this class configures so |
||
324 | * that the values are accessible and so that the framework does not |
||
325 | * revert the configuration settings that this class changes when one of |
||
326 | * the components initializes later. |
||
327 | * |
||
328 | * @return void |
||
329 | */ |
||
330 | protected function configureLumenComponents() |
||
337 | |||
338 | /** |
||
339 | * Copy the Redis Sentinel connection configuration to use for Horizon |
||
340 | * connections from the connection specified by "horizon.use". |
||
341 | * |
||
342 | * @return array The configuration matching the connection name specified |
||
343 | * by the "horizon.use" config directive. |
||
344 | * |
||
345 | * @throws UnexpectedValueException If no Redis Sentinel connection matches |
||
346 | * the name declared by "horizon.use". |
||
347 | */ |
||
348 | protected function getSelectedHorizonConnectionConfiguration() |
||
361 | |||
362 | /** |
||
363 | * Reconcile the package configuration and use it to set the appropriate |
||
364 | * configuration values for other application components. |
||
365 | * |
||
366 | * @return void |
||
367 | */ |
||
368 | protected function loadPackageConfiguration() |
||
385 | |||
386 | /** |
||
387 | * Set the application configuration value for the specified key with the |
||
388 | * value from the package configuration. |
||
389 | * |
||
390 | * @param string $configKey The key of the config value to set. Should |
||
391 | * correspond to a key in the package's configuration. |
||
392 | * @param bool $checkExists If TRUE, don't set the value if the key |
||
393 | * already exists in the application configuration. |
||
394 | * |
||
395 | * @return void |
||
396 | */ |
||
397 | protected function setConfigurationFor($configKey, $checkExists = true) |
||
407 | |||
408 | /** |
||
409 | * Set the application session configuration as specified by the package's |
||
410 | * configuration if the app supports sessions. |
||
411 | * |
||
412 | * @return void |
||
413 | */ |
||
414 | protected function setSessionConfiguration() |
||
425 | |||
426 | /** |
||
427 | * Get the package configuration for the specified key. |
||
428 | * |
||
429 | * @param string $configKey The key of the configuration value to get |
||
430 | * |
||
431 | * @return mixed The value of the configuration with the specified key |
||
432 | */ |
||
433 | protected function getPackageConfigurationFor($configKey) |
||
441 | |||
442 | /** |
||
443 | * Merge the package's default configuration with the override config file |
||
444 | * supplied by the developer, if any. |
||
445 | * |
||
446 | * @return void |
||
447 | */ |
||
448 | protected function mergePackageConfiguration() |
||
455 | |||
456 | /** |
||
457 | * Parse Redis Sentinel connection host definitions to create single host |
||
458 | * entries for host definitions that specify multiple hosts. |
||
459 | * |
||
460 | * @return void |
||
461 | */ |
||
462 | protected function normalizeHosts() |
||
475 | |||
476 | /** |
||
477 | * Remove the package's configuration from the application configuration |
||
478 | * repository. |
||
479 | * |
||
480 | * This package's configuration contains partial elements from several |
||
481 | * other component configurations. By default, the package removes its |
||
482 | * configuration after merging the values into each of the appropriate |
||
483 | * config locations for the components it initializes. This behavior |
||
484 | * prevents the artisan "config:cache" command from saving unnecessary |
||
485 | * configuration values to the cache file. |
||
486 | * |
||
487 | * @return void |
||
488 | */ |
||
489 | protected function cleanPackageConfiguration() |
||
505 | } |
||
506 |