Wie man eine Konfigurationsdatei lädt
Einzelne Nette-Komponenten werden über Konfigurationsdateien eingerichtet. Wir zeigen Ihnen, wie Sie diese Dateien laden.
Wenn Sie das gesamte Framework verwenden, müssen Sie nichts weiter tun. In Ihrem Projekt gibt es ein vorbereitetes
Verzeichnis config/
für Konfigurationsdateien, und deren Laden wird vom Anwendungs-Bootstrap übernommen. Dieser
Artikel richtet sich an Benutzer, die nur eine Nette-Bibliothek verwenden und die Möglichkeiten der Konfigurationsdateien nutzen
möchten.
Konfigurationsdateien werden normalerweise im NEON-Format geschrieben und am besten in Editoren mit NEON-Unterstützung bearbeitet. Sie können als Anleitungen zum Erstellen und Konfigurieren von Objekten verstanden werden. Das Ergebnis des Ladens der Konfiguration ist also eine sogenannte Factory, ein Objekt, das auf Anfrage weitere Objekte erstellt, die wir verwenden möchten. Zum Beispiel eine Datenbankverbindung usw.
Dieser Factory wird auch Dependency Injection Container (DI-Container) genannt. Wenn Sie an Details interessiert sind, lesen Sie das Kapitel über Dependency Injection.
Das Laden der Konfiguration und das Erstellen des Containers übernimmt die Klasse Nette\Bootstrap\Configurator. Installieren wir
also zuerst ihr Paket nette/bootstrap
:
composer require nette/bootstrap
Und wir erstellen eine Instanz der Klasse Configurator
. Da der generierte DI-Container auf der Festplatte
zwischengespeichert wird, ist es notwendig, den Pfad zum Verzeichnis festzulegen, in dem er gespeichert werden soll:
$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');
Unter Linux oder macOS setzen Sie für das Verzeichnis temp/
Schreibberechtigungen.
Und wir kommen zu den Konfigurationsdateien selbst. Wir laden sie mit addConfig()
:
$configurator->addConfig(__DIR__ . '/database.neon');
Wenn wir mehrere Konfigurationsdateien hinzufügen möchten, können wir die Funktion addConfig()
mehrmals
aufrufen. Wenn in den Dateien Elemente mit denselben Schlüsseln vorkommen, werden sie überschrieben (oder im Falle von Arrays zusammengeführt). Eine später eingefügte
Datei hat eine höhere Priorität als die vorherige.
Der letzte Schritt ist die Erstellung des DI-Containers:
$container = $configurator->createContainer();
Und dieser erstellt uns dann die gewünschten Objekte. Wenn Sie beispielsweise die Konfiguration für Nette Database verwenden, können Sie ihn bitten, Datenbankverbindungen zu erstellen:
$db = $container->getByType(Nette\Database\Connection::class);
// oder
$explorer = $container->getByType(Nette\Database\Explorer::class);
// oder beim Erstellen mehrerer Verbindungen
$db = $container->getByName('database.main.connection');
Und jetzt können Sie mit der Datenbank arbeiten!
Entwicklungs- vs. Produktionsmodus
Im Entwicklungsmodus wird der Container bei jeder Änderung der Konfigurationsdateien automatisch aktualisiert. Im Produktionsmodus wird er nur einmal generiert, und Änderungen werden nicht überprüft. Der Entwicklungsmodus ist also auf maximalen Komfort für den Programmierer ausgerichtet, der Produktionsmodus auf Leistung und den Live-Einsatz.
Die Modusauswahl erfolgt durch Autoerkennung, sodass normalerweise keine Konfiguration oder manuelles Umschalten erforderlich
ist. Der Modus ist der Entwicklungsmodus, wenn die Anwendung auf Localhost (d.h. IP-Adresse 127.0.0.1
oder
::1
) ausgeführt wird und kein Proxy vorhanden ist (d.h. dessen HTTP-Header). Andernfalls läuft sie im
Produktionsmodus.
Wenn wir den Entwicklungsmodus auch in anderen Fällen aktivieren möchten, zum Beispiel für Programmierer, die von einer
bestimmten IP-Adresse zugreifen, verwenden wir setDebugMode()
:
$configurator->setDebugMode('23.75.345.200');
// Es kann auch ein Array von IP-Adressen angegeben werden
Wir empfehlen dringend, die IP-Adresse mit einem Cookie zu kombinieren. Wir speichern ein geheimes Token, z.B.
secret1234
, im Cookie nette-debug
und aktivieren auf diese Weise den Entwicklungsmodus für
Programmierer, die von einer bestimmten IP-Adresse zugreifen und gleichzeitig das erwähnte Token im Cookie haben:
$configurator->setDebugMode('secret1234@23.75.345.200');
Wir können den Entwicklungsmodus auch vollständig deaktivieren, sogar für Localhost:
$configurator->setDebugMode(false);
Parameter
In Konfigurationsdateien können Sie auch Parameter verwenden, die im Abschnitt parameters
definiert sind.
Sie können auch von außen über die Methode addDynamicParameters()
eingefügt werden:
$configurator->addDynamicParameters([
'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);
Auf den Parameter projectId
kann in der Konfiguration mit der Notation %projectId%
verwiesen
werden.