Installation
composer require c975l/config-bundle
Add to bundles.php (Symfony 5+):
return [
// ...
c975L\ConfigBundle\c975LConfigBundle::class => ['all' => true],
];
Define Config Structure
Create a YAML file (e.g., config/config.yml) with your key-value pairs:
app:
title: "My App"
debug_mode: true
api_endpoint: "https://api.example.com"
First Use Case Access values in Twig:
{{ config('app.title') }} {# Outputs "My App" #}
Define Config
Use YAML/JSON files in config/ directory (e.g., config/app.yml).
Example:
features:
newsletter: true
analytics: false
Build Admin Form
Override the default form template (templates/bundles/c975LConfigBundle/views/form.html.twig).
Inject your config file path via dependency injection:
// services.yaml
c975L\ConfigBundle\ConfigManager:
arguments:
$configFiles: ['%kernel.project_dir%/config/app.yml']
Access in Controllers
Fetch values via the ConfigManager service:
$title = $this->get('config_manager')->get('app.title');
Twig Integration Use the Twig extension globally:
{% set apiUrl = config('app.api_endpoint') %}
ConfigValidator to add custom rules.config/dev.yml, config/prod.yml).# config/packages/c975LConfigBundle.yaml
c975L_config:
cache: true
Template Overrides
form.html.twig may break the admin UI.Resources/views/ to your project’s templates/bundles/c975LConfigBundle/views/.Key-Value System (v2.0+)
Configuration class, so custom validation requires manual implementation.c975L\ConfigBundle\Validator\ConfigValidator:
public function validate($value, Constraint $constraint)
{
if ($value === 'debug_mode' && $this->isProd()) {
throw new \InvalidArgumentException('Debug mode disabled in production.');
}
}
Caching Issues
php bin/console cache:clear
YAML Parsing Quirks
true/false), not quotes ("true").# Correct
debug: true
# Incorrect (will be parsed as string)
debug: "true"
Dynamic Config Loading Load configs dynamically based on user roles:
$configFiles = [];
if ($this->isAdmin()) {
$configFiles[] = '%kernel.project_dir%/config/admin.yml';
}
$configManager->setConfigFiles($configFiles);
Environment Variables Merge environment variables with YAML configs:
# .env
APP_TITLE=Custom Title
$configManager->mergeWithEnv();
Event Listeners Listen for config changes to trigger actions (e.g., cache invalidation):
$eventDispatcher->addListener(
c975L\ConfigBundle\Event\ConfigUpdatedEvent::class,
function () {
$this->container->get('cache')->clear();
}
);
Testing
Mock ConfigManager in tests:
$configManager = $this->createMock(ConfigManager::class);
$configManager->method('get')->willReturn('Test Value');
$this->container->set('config_manager', $configManager);
How can I help you explore Laravel packages today?