Konfiguration und Umgebungen
Konfiguration und Umgebungen
~13 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026
Symfony trennt Konfiguration konsequent von Code – ein zentrales Prinzip, das wir in diesem Kapitel verstehen, bevor wir in Kapitel 5 die Datenbank-Verbindung für unseren Aufgaben-Manager einrichten.
Die drei Standard-Umgebungen
| Umgebung | Zweck |
|---|---|
| dev | Für die lokale Entwicklung: Debug-Toolbar, ausführliche Fehlerseiten, KEIN Cache für Konfiguration/Routen (jede Änderung wirkt sofort). |
| test | Für automatisierte Tests (Block 7): isolierte Umgebung, oft eine separate Test-Datenbank. |
| prod | Für den Produktivbetrieb: aggressives Caching, KEINE Debug-Informationen in Fehlerseiten (Sicherheitsrisiko), optimiert auf Geschwindigkeit. |
Welche Umgebung aktiv ist, bestimmt die Variable APP_ENV – standardmäßig dev beim lokalen Arbeiten mit der Symfony CLI.
.env-Dateien verstehen
Symfony liest Umgebungsvariablen aus MEHREREN .env*-Dateien, die sich in genau festgelegter Reihenfolge überschreiben:
.env– Standardwerte, wird VERSIONIERT (keine echten Geheimnisse!)..env.local– lokale Überschreibungen, NICHT versioniert, für Ihre persönlichen Werte..env.$APP_ENV(z. B..env.test) – umgebungsspezifisch, wird versioniert..env.$APP_ENV.local– lokale, umgebungsspezifische Überschreibung, NICHT versioniert.
APP_ENV=dev
APP_SECRET=change_me_in_env_local
DATABASE_URL="postgresql://symfony:symfony@127.0.0.1:5432/aufgaben_manager?serverVersion=16&charset=utf8"Achtung: .env landet im Git-Repository – schreiben Sie hier NIEMALS echte Passwörter oder API-Schlüssel hinein, nur unbedenkliche Standardwerte. Echte Geheimnisse gehören in .env.local, das per .gitignore ausgeschlossen ist (Symfony richtet das bei der Installation bereits automatisch ein).
Konfigurationsdateien in config/
Jedes installierte Bundle bringt seine eigene Konfigurationsdatei unter config/packages/ mit – z. B. config/packages/doctrine.yaml für Doctrine (Block 4) oder config/packages/security.yaml für Security (Block 5). Diese YAML-Dateien nutzen häufig Umgebungsvariablen als Platzhalter:
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
orm:
auto_generate_proxy_classes: true
enable_lazy_ghost_objects: true%env(resolve:DATABASE_URL)% liest den Wert der Umgebungsvariable DATABASE_URL aus den .env*-Dateien – die eigentliche Konfigurationsdatei bleibt so für ALLE Umgebungen identisch, nur die Umgebungsvariable unterscheidet sich.
Umgebungsspezifische Konfigurations-Überschreibungen
Innerhalb von config/packages/ lassen sich Unterordner pro Umgebung anlegen, deren Inhalt NUR in dieser Umgebung geladen wird:
Umgebungsspezifische Konfiguration
config/packages/
├── doctrine.yaml (in ALLEN Umgebungen geladen)
├── dev/
│ └── monolog.yaml (NUR in dev geladen: ausführliches Logging)
└── prod/
└── monolog.yaml (NUR in prod geladen: reduziertes Logging)Den Konfigurations-Cache verstehen
In prod kompiliert Symfony ALLE Konfiguration (Routen, Services, Container) EINMALIG zu hochoptimiertem PHP-Code in var/cache/prod/ – spätere Änderungen an config/ wirken sich dort NICHT automatisch aus, bis der Cache explizit geleert wird:
php bin/console cache:clear --env=prodAchtung: Ein HÄUFIGER Anfängerfehler: eine Konfigurationsänderung in Produktion vorgenommen, aber vergessen, den Cache zu leeren – die alte Konfiguration bleibt dann wirksam, bis der Cache abläuft oder manuell geleert wird. In dev passiert das NICHT, da Konfigurationsänderungen dort automatisch erkannt werden – ein weiterer Grund, warum dev spürbar langsamer als prod ist.