adgoal/cleaner-bundle
Symfony bundle integrating lamoda/cleaner. Configure DB and custom storage cleaners via YAML, including transactional mode, parameters, and multi-query setups. Provides a console command to run all cleaners or a selected one (cleaner:clear).
Installation
composer require adgoal/cleaner-bundle
Register the bundle in config/bundles.php:
Lamoda\CleanerBundle\LamodaCleanerBundle::class => ['all' => true],
Basic Configuration
Define a cleaning rule in config/packages/lamoda_cleaner.yaml:
lamoda_cleaner:
db:
queue:
query: "DELETE FROM queue WHERE created_at < NOW() - (:interval || ' days')::interval"
parameters:
interval: 30
First Use Case Run the cleaner via CLI:
php bin/console cleaner:run queue
Database Cleaning Define queries for tables requiring cleanup (e.g., logs, queues, temp tables):
lamoda_cleaner:
db:
logs:
query: "DELETE FROM logs WHERE created_at < NOW() - (:interval || ' days')::interval"
parameters:
interval: 7
Run with:
php bin/console cleaner:run logs
Multi-Table Cleanup
Use multi_tables for batch operations:
lamoda_cleaner:
db:
multi_tables:
query: "DELETE FROM {table} WHERE created_at < NOW() - (:interval || ' days')::interval"
parameters:
interval: 30
tables: ["queue", "temp_data"]
Run with:
php bin/console cleaner:run multi_tables
Custom Cleaners Extend the bundle by creating custom cleaners (e.g., for files or external APIs):
// src/Cleaner/CustomCleaner.php
namespace App\Cleaner;
use Lamoda\Cleaner\CleanerInterface;
class CustomCleaner implements CleanerInterface {
public function clean(): void {
// Custom logic (e.g., delete old files)
}
}
Register in services.yaml:
services:
App\Cleaner\CustomCleaner:
tags: [lamoda_cleaner.cleaner]
Run with:
php bin/console cleaner:run custom_cleaner
Scheduled Cleanup
Use Symfony’s scheduler (e.g., with cron) to automate cleanup:
# Example crontab entry (run daily at 2 AM)
0 2 * * * php bin/console cleaner:run queue
Transaction Handling
transactional: true (for DB cleaners). Disable if cleanup logic requires intermediate commits:
lamoda_cleaner:
db:
queue:
transactional: false
Parameter Validation
parameters in YAML are correctly typed (e.g., interval as integer or string).Table Locking
Debugging Queries
# config/packages/dev/lamoda_cleaner.yaml
lamoda_cleaner:
debug: true
Custom Cleaner Registration
lamoda_cleaner.cleaner will make them undiscoverable by the CLI.Dry Runs
Use --dry-run to preview deletions without executing:
php bin/console cleaner:run queue --dry-run
Logging Add logging to track cleanup operations:
lamoda_cleaner:
db:
queue:
log: true # Logs deletions to Symfony's logger
Environment-Specific Configs
Override configs per environment (e.g., config/packages/dev/lamoda_cleaner.yaml):
lamoda_cleaner:
db:
queue:
interval: 1 # Shorter interval in dev
Backup Before Cleaning Always back up critical tables before running deletions, especially in production.
Performance Tuning
LIMIT to queries to avoid long-running transactions:
lamoda_cleaner:
db:
queue:
query: "DELETE FROM queue WHERE created_at < NOW() - (:interval || ' days')::interval LIMIT 1000"
How can I help you explore Laravel packages today?