incenteev/composer-parameter-handler
.env-like parameter files (e.g., parameters.yml) from a .dist template during composer install/update. This aligns well with Laravel’s 12-factor app principles (config separation, environment parity) and Symfony’s parameter handling patterns..env files and Symfony’s parameters.yml serve similar purposes (environment-specific configs). While Laravel primarily uses .env, this package could complement legacy Symfony bundles or hybrid Laravel/Symfony apps (e.g., Lumen, Laravel with Symfony components).config/parameters.yml) alongside .env.parameters.yml..env for structured configs (e.g., database clusters, feature flags)..env + env() helper or config() caching already handles most use cases. This package adds value only for non-.env workflows or multi-framework projects.composer.json.extra.incenteev-parameters to point to the .dist and target files.post-install-cmd/post-update-cmd.parameters.yml (not .env). Conflicts unlikely unless mixing config sources..dist file with a top-level parameters key (e.g., parameters.yml.dist). Laravel’s .env files won’t work without adaptation.parameters.yml.dist is manually edited post-install, the package will overwrite changes during composer update..dist file.config() cache may ignore parameters.yml if not loaded via a service provider.ConfigServiceProvider)..env effectively..env can’t handle?parameters.yml?composer install in CI/CD environments re-generate configs, causing flakiness?parameters.yml from accidental overwrites?parameters.yml values be exposed to Laravel’s config() system?ParameterBag or ContainerInterface..env Configs: Teams preferring YAML for complex, hierarchical configs (e.g., database replicas, feature toggles)..env unless there’s a specific need for YAML..env can be replaced or supplemented with YAML.parameters.yml.app/config/parameters.yml for logging).composer install/update to verify file generation..env variables with YAML where beneficial (e.g., parameters.yml for database clusters).ConfigServiceProvider to merge YAML configs:
$this->mergeConfigFrom(__DIR__.'/../../config/parameters.yml', 'parameters');
.env usage for YAML-covered configs (document migration steps).| Component | Compatibility Notes |
|---|---|
| Laravel | Works if configs are loaded via service providers. No native support for parameters.yml. |
| Symfony | Native fit; ideal for Laravel apps using Symfony’s DI. |
| PHP 8.0+ | Required; Laravel 9+ is compliant. |
| Composer | Standard post-install-cmd hook; no conflicts. |
| CI/CD | May regenerate configs on every composer install; cache .dist files. |
composer require incenteev/composer-parameter-handler
composer.json:
"extra": {
"incenteev-parameters": {
"file": "config/parameters.yml"
}
},
"scripts": {
"post-install-cmd": ["Incenteev\\ParameterHandler\\ScriptHandler::buildParameters"],
"post-update-cmd": ["Incenteev\\ParameterHandler\\ScriptHandler::buildParameters"]
}
parameters.yml.dist to parameters.yml (or vice versa) with placeholders:
parameters:
database.host: "%env(DATABASE_HOST)%" # Example: Bridge YAML and .env
cache.redis.host: "127.0.0.1"
$parameters = Yaml::parse(file_get_contents(__DIR__.'/../../config/parameters.yml'));
$this->mergeConfigFrom($parameters, 'parameters');
composer install generates parameters.yml.config('parameters.database.host') works..dist file)..dist file can be committed to Git (unlike .env).composer update will clobber parameters.yml if edited..dist templates.parameters.yml should be git-ignored (or use a parameters.yml.example).post-autoload-dump instead of post-install-cmd to avoid CI/CD regen.parameters.yml.dist exists and is valid YAML.composer.json scripts are correctly hooked..dist files..env and YAML without a bridge (e.g., using %env() placeholders in YAML).AppServiceProvider to validate parameters.yml exists.composer operation; no runtime overhead..dist templates (e.g., parameters.yml.dist.staging)..dist files or a build step to swap them.parameters.yml generated independently.| Failure Scenario | Impact | Recovery |
|---|---|---|
.dist file missing |
How can I help you explore Laravel packages today?