Allow Module Configs to Override Root Application Configs #2053
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary:
This PR introduces a core enhancement to the
registerConfig()
logic. It ensures that configuration files within a module (e.g.,modules/Blog/config/config.php
ormodules/Blog/config/blog.php
) override Laravel's root application configs (e.g.,config/blog.php
) during registration.Why This is Necessary:
The modular architecture encourages encapsulation of logic and behavior per domain (module). However, Laravel’s default
mergeConfigFrom()
merges shallowly and always prioritizes existing config values, meaning module-defined values are ignored if a root config already exists.This directly contradicts the core idea of modularity - that a module should define and control its behavior without being limited by app-level configs.
By allowing module configs to override root configs, developers get:
Before:
After:
// config('blog.comments') === true
Module config values now correctly override root config values.