Installation:
composer require craue/config-bundle
Enable the bundle in config/bundles.php:
return [
Craue\ConfigBundle\CraueConfigBundle::class => ['all' => true],
];
Database Migration: Generate and run migrations:
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
(Alternative: php bin/console doctrine:schema:update --force)
First Use Case:
Define a config key via YAML (e.g., config/settings.yml):
parameters:
my_app:
feature_flag: false
api_endpoint: "https://api.example.com"
Access it in a controller/service:
$this->container->get('craue_config.manager')->get('my_app.feature_flag');
Configuration Management:
config/settings.yml to declare keys (e.g., app.max_upload_size).Craue\ConfigBundle\Manager\ConfigManagerInterface (alias: craue_config.manager) to fetch values:
$value = $configManager->get('app.max_upload_size', 10); // Default: 10
ConfigManager::set().Environment-Specific Configs:
Override settings per environment (e.g., config/settings/dev.yml):
parameters:
app.debug_mode: true
Dependency Injection: Bind configs to services via constructor injection:
public function __construct(private ConfigManagerInterface $configManager) {}
Validation: Use Symfony’s validator constraints in YAML:
parameters:
app.timeout:
value: 30
type: integer
min: 1
max: 60
ConfigUpdatedEvent to react to changes:
use Craue\ConfigBundle\Event\ConfigUpdatedEvent;
public function onConfigUpdated(ConfigUpdatedEvent $event) {
$this->logger->info('Config updated:', [$event->getKey() => $event->getValue()]);
}
craue_config.cache config to reduce DB hits./settings route via firewall rules.Migration Conflicts:
craue_config table exists but is misconfigured, drop it manually:
php bin/console doctrine:schema:drop --force
php bin/console doctrine:migrations:migrate
Caching Issues:
php bin/console cache:clear
craue_config.cache: false in config).Type Safety:
null or defaults. Always provide fallbacks:
$timeout = $configManager->get('app.timeout', 30); // Default: 30
Admin UI Quirks:
app.nested.value). Use the API (ConfigManager) for complex structures.$this->logger->debug('All configs:', $configManager->all());
craue_config table has entries:
SELECT * FROM craue_config WHERE `key` LIKE 'app.%';
Custom Storage:
Override the default ConfigStorage to use a custom backend (e.g., Redis):
# config/packages/craue_config.yaml
craue_config:
storage: App\Custom\RedisConfigStorage
Event Subscribers:
Extend ConfigUpdatedEvent to trigger actions (e.g., restart workers):
$eventDispatcher->addListener(ConfigUpdatedEvent::class, [$this, 'handleConfigUpdate']);
Validation Rules:
Add custom validators by implementing Craue\ConfigBundle\Validator\ConstraintValidatorInterface.
API Endpoints: Build custom APIs for config management:
use Symfony\Component\HttpFoundation\JsonResponse;
public function getConfig(Request $request): JsonResponse {
return new JsonResponse($this->configManager->all());
}
How can I help you explore Laravel packages today?