Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

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

UmgebungZweck
devFür die lokale Entwicklung: Debug-Toolbar, ausführliche Fehlerseiten, KEIN Cache für Konfiguration/Routen (jede Änderung wirkt sofort).
testFür automatisierte Tests (Block 7): isolierte Umgebung, oft eine separate Test-Datenbank.
prodFü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:

  1. .env – Standardwerte, wird VERSIONIERT (keine echten Geheimnisse!).
  2. .env.local – lokale Überschreibungen, NICHT versioniert, für Ihre persönlichen Werte.
  3. .env.$APP_ENV (z. B. .env.test) – umgebungsspezifisch, wird versioniert.
  4. .env.$APP_ENV.local – lokale, umgebungsspezifische Überschreibung, NICHT versioniert.
.env
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:

config/packages/doctrine.yaml
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=prod

Achtung: 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.