matthiasnoback/symfony-config-test
PHPUnit helpers for testing Symfony Config definitions. Provides a test case trait and assertions to validate config trees, ensuring required nodes, types, and constraints behave as expected by asserting valid and invalid configuration arrays.
Config component, which is a common dependency in Laravel applications using Symfony bundles (e.g., Symfony Mailer, Symfony HTTP Client, or custom Symfony-based packages). If the Laravel application leverages Symfony’s configuration system (e.g., via spatie/laravel-config or custom Symfony bundles), this package provides a direct fit for validating configuration logic.Config component, the package can still be useful in:
config/ files (via custom ConfigurationInterface implementations).--dev) and does not modify runtime behavior. It integrates via PHPUnit traits, requiring minimal boilerplate.symfony/config package (v4.4+ or v5.0–5.3). If the Laravel app already uses Symfony components, this is a non-issue. Otherwise, adding it as a dev dependency is straightforward.config/ files, a wrapper class would need to implement ConfigurationInterface to bridge Symfony’s TreeBuilder with Laravel’s array-based config.Config component (e.g., spatie/laravel-symfony-mailer), integration is seamless.| Risk Area | Assessment | Mitigation Strategy |
|---|---|---|
| Symfony Dependency | Adds symfony/config to dev dependencies; may conflict with existing Symfony versions. |
Pin to a compatible version (e.g., ^5.4) and audit for version conflicts. |
| Laravel Config Gap | Native Laravel config is not Symfony-compatible; requires abstraction layer. | Create a thin adapter class to translate Laravel config arrays to Symfony’s TreeBuilder. |
| Test Complexity | Advanced features (e.g., prototype nodes, breadcrumb paths) may require steep learning curve. | Start with basic assertions (assertConfigurationIsInvalid, assertProcessedConfigurationEquals) and gradually adopt advanced features. |
| Maintenance Overhead | Package is actively maintained (last release: 2026), but Laravel’s config system evolves separately. | Monitor Symfony Config Component updates and adapt wrapper classes as needed. |
symfony/config? If not, what is the justification for adding it?Config component in a Laravel test suite?phpunit/assertions) or custom assertions achieve similar goals with less overhead?phpunit/phpunit, symfony/yaml) that could complement or replace this?spatie/laravel-symfony-mailer or custom packages using symfony/config can directly leverage this package.config/ arrays with Symfony’s TreeBuilder. Example:
class LaravelConfigAdapter implements ConfigurationInterface {
public function getConfigTreeBuilder(): TreeBuilder {
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('app');
// Map Laravel's config structure to Symfony's TreeBuilder
return $treeBuilder;
}
}
symfony/config and matthiasnoback/symfony-config-test to composer.json under require-dev.symfony/config: ^5.4, phpunit/phpunit: ^10.0).ConfigurationInterface implementation that mirrors config/app.php or package-specific config.class AppConfiguration implements ConfigurationInterface {
public function getConfigTreeBuilder(): TreeBuilder {
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('app');
$rootNode
->children()
->scalarNode('timezone')->defaultValue('UTC')->end()
->arrayNode('queues')
->useAttributeAsKey('connector')
->prototype('array')
->children()
->scalarNode('driver')->isRequired()->end()
->end()
->end()
->end()
->end();
return $treeBuilder;
}
}
// Before: Manual assertion
$config = config('app');
$this->assertArrayHasKey('timezone', $config);
// After: Using SymfonyConfigTest
$this->assertProcessedConfigurationEquals(
[['app' => ['timezone' => 'America/New_York']]],
['timezone' => 'America/New_York']
);
database.connections.*).| Component | Compatibility Status | Notes |
|---|---|---|
| PHP | 8.1+ (per Symfony 6+ requirements) | Laravel 10+ supports this; older versions may need PHP upgrades. |
| PHPUnit | 9.6–13.x | Laravel’s default PHPUnit (v9+) is compatible. |
| Symfony Config | 4.4–5.3 or 6.x | Ensure no conflicts with existing Symfony bundles. |
| Laravel Config | Requires adapter layer | Native Laravel config arrays must be mapped to TreeBuilder. |
| CI/CD | No known conflicts | Tests run in isolation; no runtime dependencies. |
composer.json.phpunit.xml to ensure PHPUnit version compatibility.ConfigurationInterface implementations for critical config sections.DatabaseConfiguration, QueueConfiguration.How can I help you explore Laravel packages today?