Directory Loading
Load and merge configuration from entire directories.
Use case: Loading environment-specific configurations, managing modular config files, or combining multiple configuration sources.
Basic Directory Loading
Section titled “Basic Directory Loading”use Cline\Ferret\Config;
// Load all config files from a directory$config = Config::loadDirectory('config/');
// Files are merged in alphabetical order// config/// app.json -> loaded first// database.json -> merged second// cache.json -> merged thirdEnvironment-Specific Loading
Section titled “Environment-Specific Loading”// Load base config, then environment overlay$config = Config::loadDirectory('config/');$config->merge(Config::loadDirectory('config/production/'));Mixed Formats
Section titled “Mixed Formats”Directories can contain mixed file formats:
// app.json// database.yaml// cache.toml// features.php
$config = Config::loadDirectory('config/');// All formats are loaded and merged togetherRecursive Loading
Section titled “Recursive Loading”// Load configs recursively from subdirectories$config = Config::loadDirectory('config/', recursive: true);
// app.json// services/// mail.json// queue.jsonFiltering Files
Section titled “Filtering Files”// Only load specific formats$config = Config::loadDirectory('config/', extensions: ['json', 'yaml']);
// Exclude certain files$config = Config::loadDirectory('config/', exclude: ['secrets.json']);Merge Strategies
Section titled “Merge Strategies”Deep Merge (Default)
Section titled “Deep Merge (Default)”// config/base.json: {"database": {"host": "localhost"}}// config/prod.json: {"database": {"port": 3306}}
$config = Config::loadDirectory('config/');// Result: {"database": {"host": "localhost", "port": 3306}}Shallow Merge
Section titled “Shallow Merge”$config = Config::loadDirectory('config/', deepMerge: false);// Later files completely replace earlier values