ashallendesign/laravel-config-validator
Validate your Laravel config at runtime or via Artisan. Define rulesets for config files with custom messages and environment targeting, generate rulesets quickly, and optionally publish defaults. Catch missing/invalid config early in local, CI, or production.
config() helper by adding structured validation rules (e.g., required fields, type constraints, nested validation).config() system, with minimal friction for adoption. Integrates via service provider bootstrapping, leveraging Laravel’s existing DI container.config('app.timezone')), not on every request, making it lightweight.config(), config_path()).booting event to validate early in the request lifecycle.config_cache) may require custom rule logic, increasing maintenance overhead.database.php, services.php)?config_cache) or loaded from external sources (e.g., environment variables)?queue.php).config/ files for validation needs (e.g., required fields, types).database.php, mail.php) for initial validation.composer require ashallendesign/laravel-config-validator.php artisan vendor:publish --provider="AshAllenDesign\ConfigValidator\ConfigValidatorServiceProvider".config/config-validator.php (e.g., validate app.timezone is a valid IANA timezone).logging.php).database.php, services.php, etc.- name: Validate Config
run: php artisan config:validate
.php, .yaml, and .json config files (Laravel’s native formats).ConfigValidator class..env-based configs (e.g., config/services.php referencing .env vars).booting event to validate configs before they’re used in the request lifecycle:
use AshAllenDesign\ConfigValidator\Events\ConfigValidated;
ConfigValidated::listen(function () {
// Early failure if validation fails
});
use AshAllenDesign\ConfigValidator\Facades\ConfigValidator;
if (!ConfigValidator::validate('app.timezone')) {
abort(500, 'Invalid timezone configuration');
}
ConfigValidated::listen(function ($event) {
if ($event->hasErrors()) {
Log::error('Config validation failed', $event->errors());
}
});
config/v1/database.php, config/v2/database.php).CONFIG_VALIDATION.md in your repo to document:
.env var causing a config field to be null). Improve with:
database.php vs. logging.php).php artisan tinker:
\AshAllenDesign\ConfigValidator\Facades\ConfigValidator::validateAll();
config/tenants/{id}.php).validateFor() method to scope validations.| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Invalid config at boot | App crashes (500 error) | Use booting event to fail fast; provide clear error pages. |
Missing .env variables |
Config validation fails | Validate .env files separately (e.g., with vlucas/phpdotenv-validator). |
| Circular config references | Infinite loops in validation | Add recursion depth limits in custom rules. |
| Custom rule errors | Silent failures or crashes | Wrap custom rules in try-catch; log errors to Sentry. |
| Package update breaks compatibility | Validation fails post-update | Test updates in staging; use composer why-not to debug dependency conflicts. |
How can I help you explore Laravel packages today?