c33s/symfony-config-manipulator-bundle
Symfony2 bundle to keep YAML config organized by splitting app/config/config*.yml into section files (framework, doctrine, twig, etc.) and rewriting imports accordingly. Helps declutter large config.yml files and manage per-environment configs cleanly.
config/app.php with modular files (e.g., config/auth.php, config/cache.php).
config:publish for package-specific configs.config/app.php into smaller files (see Implementation Patterns).config/ directory structure.php artisan config:publish for package configs.config/app.php, config/env.php.config/app.php into domain-specific files (e.g., config/auth.php, config/queue.php).// Before: config/app.php (monolithic)
return [
'auth' => [...],
'queue' => [...],
'cache' => [...],
];
// After: config/auth.php, config/queue.php, etc.
config() helper to merge files:
return array_merge(
require __DIR__.'/auth.php',
require __DIR__.'/queue.php',
// ...
);
php artisan config:cache
config/env.php for environment-specific settings (e.g., APP_DEBUG, database URLs).// config/env.php
return [
'debug' => env('APP_DEBUG', false),
'database' => [
'url' => env('DATABASE_URL'),
],
];
env.php in config/app.php:
return array_merge(
require __DIR__.'/env.php',
// other configs...
);
config:publish to split package configs into config/packages/ (e.g., config/packages/doctrine.php).php artisan vendor:publish --tag=config
config/app.php:
return array_merge(
require __DIR__.'/packages/doctrine.php',
// other configs...
);
config/app.php into modular files.// app/Console/Commands/SplitConfig.php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\File;
class SplitConfig extends Command
{
protected $signature = 'config:split';
protected $description = 'Split config/app.php into modular files';
public function handle()
{
$configPath = base_path('config/app.php');
$config = include $configPath;
foreach ($config as $key => $value) {
if (is_array($value)) {
File::put(
base_path("config/{$key}.php"),
'<?php return ' . var_export($value, true) . ';'
);
}
}
$this->info('Config files split successfully!');
}
}
php artisan config:split
config/app.php and config/auth.php both define auth.driver, edit one file to avoid duplication.array_merge_recursive() with caution to handle nested conflicts:
$merged = array_merge_recursive(
require __DIR__.'/auth.php',
require __DIR__.'/app.php'
);
No Direct Laravel Support:
YAML vs. PHP Arrays:
/**
* Authentication settings.
*/
return [
'driver' => 'session',
// ...
];
Config Caching Issues:
config/app.php, run php artisan config:clear and config:cache to avoid stale configs.Merge Conflicts:
auth.driver in both config/app.php and config/auth.php).array_replace_recursive() to prioritize specific files:
$finalConfig = array_replace_recursive(
require __DIR__.'/base.php',
require __DIR__.'/auth.php',
require __DIR__.'/env.php'
);
Environment-Specific Files:
config/env.php is not auto-loaded by default. Ensure it’s merged in config/app.php.env.php may cause environment variables to be ignored.Package Config Overrides:
config/packages/doctrine.php) may conflict with manual configs.config:publish with --tag to isolate package configs:
php artisan config:publish --tag=doctrine --force
Check Config Loading Order:
php artisan config:clear to reset cached configs.dd(config()->all());
Validate YAML (If Using Hybrid Approach):
composer require symfony/yaml
use Symfony\Component\Yaml\Yaml;
$yaml = Yaml::parseFile('config/doctrine.yml');
Handle PHP Syntax Errors:
.php config files are valid:
php -l config/auth.php
Git Conflict Resolution:
git diff to track changes when splitting configs:
git diff config/app.php config/auth.php
Custom Config Loaders:
ConfigRepository to load modular configs:
// app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Config;
public function boot()
{
Config::addPath(base_path('config/modules'));
}
Dynamic Config Generation:
// app/Providers/ConfigGenerator.php
public function boot()
{
$this->mergeConfigFrom(
__DIR__.'/../config/generated.php',
'generated'
);
}
Integration with Laravel Forge/Envoyer:
config/env.php for runtime overrides.config/production.php for production-specific settings.Validation Rules:
// config/validation.php
return [
'auth' => [
'driver' => 'required|in:session,token',
],
];
Validator::extend('config_valid', function ($attribute, $value, $parameters) {
// Custom logic to validate configs
});
How can I help you explore Laravel packages today?