It is common knowledge that configuration on Laravel applications are one of the very first things to load. If it is not, well, check out the application lifecycle here. As part of the autoconfiguration of Laravel, everything in the config folder is considered an application configuration and loads pretty much as soon as the application is booted.
Why is this important? We will get to that in a second. First how can we achieve this.
The first step is to create a custom service provider. If you are not sure what these are, here is the doc for it.
I created one called CustomConfigServiceProvider
. You can place this in the Providers directory.
Next create a new custom folder for your custom configuration files. Remember, everything in config is autoloaded. I created a folder called custom-config
In the boot section of the provider, add the following piece of code.
parent::boot();
$this->mergeConfigFrom(__DIR__.'/../../../custom-config/settings.php', 'settings');
You are probably thinking, what is happening here? Let me break it down. Here is how your file should look:
<?php
namespace App\Providers\Custom;
use Illuminate\Support\ServiceProvider;
class CustomConfigServiceProvider extends ServiceProvider
{
public function boot()
{
parent::boot();
$this->mergeConfigFrom(__DIR__.'/../../../custom-config/settings.php', 'settings');
}
public function register()
{
parent::register();
}
}
First since every provider is extending the base ServiceProvider
class from the framework, we are calling parent::boot()
to ensure the code block runs first.
Then we are merging our new configuration into the configuration set that was already loaded previously. In this case, we have a custom configuration file called settings.php
Now you have everything set up for your lazy loaded configuration.
There is just one last step to complete. We need to register our service provider. In your config/app.php
file, add your new provider in the providers array.
Viola, you now have lazy loaded configuration.
For the use cases, there are numerous, for instance, if you have a configuration that relies on a third-party application to have been loaded previously. More on this later.
Check out some cool features of Laravel 9. Are you using lazy loaded configurations? Let me know in the comments.
Top comments (0)