Nette Bootstrap
Die einzelnen Komponenten von Nette werden über Konfigurationsdateien eingestellt. Wir zeigen Ihnen, wie sich diese Dateien laden lassen.
Wenn Sie das gesamte Framework verwenden, brauchen Sie nichts weiter zu tun. Ihr Projekt hat ein vorbereitetes
Verzeichnis config/ für Konfigurationsdateien, und ihr Laden übernimmt der Loader der Anwendung. Dieser
Artikel richtet sich an Nutzer, die nur eine einzelne Nette-Bibliothek einsetzen und die Vorzüge der Konfigurationsdateien nutzen
wollen.
Konfigurationsdateien werden üblicherweise im Format NEON geschrieben und lassen sich am besten in Editoren bearbeiten, die es unterstützen. Sie können als Anleitung verstanden werden, wie Objekte erzeugt und eingestellt werden. Das Ergebnis des Ladens einer Konfiguration ist deshalb eine sogenannte Factory, also ein Objekt, das bei Bedarf weitere Objekte erzeugt, die Sie verwenden wollen. Zum Beispiel eine Datenbankverbindung usw.
Diese Factory wird auch Dependency Injection Container (DI-Container) genannt; wenn Sie sich für die Einzelheiten interessieren, lesen Sie das Kapitel über Dependency Injection.
Das Laden der Konfiguration und das Erzeugen des Containers übernimmt die Klasse Nette\Bootstrap\Configurator, deshalb
installieren wir zuerst ihr Paket nette/bootstrap:
composer require nette/bootstrap
Und erzeugen eine Instanz der Klasse Configurator. Da der erzeugte DI-Container auf der Festplatte
zwischengespeichert wird, müssen Sie den Pfad zu dem Verzeichnis setzen, in dem er abgelegt wird:
$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');
Setzen Sie unter Linux oder macOS für das Verzeichnis temp/ die Schreibrechte.
Nun kommen wir zu den Konfigurationsdateien selbst. Wir laden sie mit addConfig():
$configurator->addConfig(__DIR__ . '/database.neon');
Wollen Sie mehrere Konfigurationsdateien hinzufügen, können Sie die Funktion addConfig() mehrfach aufrufen.
Kommen in den Dateien Elemente mit denselben Schlüsseln vor, werden sie überschrieben (oder bei Arrays zusammengeführt). Die später
hinzugefügte Datei hat eine höhere Priorität als die vorherige.
Der letzte Schritt ist das Erzeugen des DI-Containers:
$container = $configurator->createContainer();
Und der erzeugt uns dann die gewünschten Objekte. Wenn Sie zum Beispiel die Konfiguration für Nette Database verwenden, können Sie ihn bitten, Datenbankverbindungen zu erzeugen:
$db = $container->getByType(Nette\Database\Connection::class);
// oder
$explorer = $container->getByType(Nette\Database\Explorer::class);
// oder beim Erzeugen mehrerer Verbindungen
$db = $container->getByName('database.main.connection');
Und schon können Sie mit der Datenbank arbeiten!
Entwicklungs- vs. Produktionsmodus
Im Entwicklungsmodus wird der Container automatisch aktualisiert, sobald sich die Konfigurationsdateien ändern. Im Produktionsmodus wird er nur einmal erzeugt, und Änderungen werden nicht geprüft. Der Entwicklungsmodus zielt also auf größtmöglichen Komfort für Programmierer, der Produktionsmodus auf Leistung und den Einsatz in der Produktion.
Die Wahl des Modus erfolgt durch Autodetection, üblicherweise müssen Sie also nichts einstellen oder von Hand umschalten. Der
Modus ist Entwicklung, wenn die Anwendung auf localhost läuft (also unter der IP-Adresse 127.0.0.1 oder
::1) und kein Proxy vorhanden ist (also dessen HTTP-Header). Andernfalls läuft sie im Produktionsmodus.
Wollen wir den Entwicklungsmodus auch in anderen Fällen einschalten, etwa für Programmierer, die von einer bestimmten
IP-Adresse zugreifen, verwenden wir setDebugMode():
$configurator->setDebugMode('23.75.345.200');
// es lässt sich auch ein Array von IP-Adressen angeben
Wir empfehlen dringend, die IP-Adresse mit einem Cookie zu verbinden. Legen Sie im Cookie nette-debug ein geheimes
Token ab, etwa secret1234. Auf diese Weise schalten Sie den Entwicklungsmodus für Programmierer ein, die von einer
bestimmten IP-Adresse zugreifen und zugleich das genannte Token im Cookie haben:
$configurator->setDebugMode('secret1234@23.75.345.200');
Wir können den Entwicklungsmodus auch vollständig abschalten, sogar für localhost:
$configurator->setDebugMode(false);
Parameter
In den Konfigurationsdateien können Sie auch Parameter verwenden, die im Abschnitt parameters
definiert werden.
Sie lassen sich auch von außen einfügen, und zwar mit der Methode addDynamicParameters():
$configurator->addDynamicParameters([
'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);
Auf den Parameter remoteIp kann in der Konfiguration mit der Schreibweise %remoteIp% verwiesen
werden.
Wenn Sie auf eine neuere Version aktualisieren, sehen Sie sich die Seite Upgrade an.