Comment charger un fichier de configuration

Les composants individuels de Nette sont configurés à l'aide de fichiers de configuration. Nous allons montrer comment charger ces fichiers.

Si vous utilisez le framework complet, vous n'avez rien d'autre à faire. Votre projet dispose d'un répertoire config/ préparé pour les fichiers de configuration, et leur chargement est géré par le chargeur de l'application. Cet article s'adresse aux utilisateurs qui n'utilisent qu'une seule bibliothèque Nette et souhaitent profiter des fonctionnalités des fichiers de configuration.

Les fichiers de configuration sont généralement écrits au format NEON et sont mieux édités dans des éditeurs qui le prennent en charge. Ils peuvent être considérés comme des instructions sur la façon de créer et configurer des objets. Ainsi, le résultat du chargement de la configuration sera une soi-disant factory, qui est un objet qui créera d'autres objets que nous voulons utiliser à la demande. Par exemple, une connexion à une base de données, etc.

Cette factory est également appelée conteneur d'injection de dépendances (conteneur DI), et si vous êtes intéressé par les détails, lisez le chapitre sur l'injection de dépendances.

Le chargement de la configuration et la création du conteneur sont gérés par la classe Nette\Bootstrap\Configurator, nous allons donc d'abord installer son paquet nette/bootstrap :

composer require nette/bootstrap

Et nous créons une instance de la classe Configurator. Comme le conteneur DI généré sera mis en cache sur le disque, il est nécessaire de définir le chemin d'accès au répertoire où il sera stocké :

$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');

Sous Linux ou macOS, définissez les droits d'écriture pour le répertoire temp/.

Et nous arrivons aux fichiers de configuration eux-mêmes. Nous les chargeons en utilisant addConfig() :

$configurator->addConfig(__DIR__ . '/database.neon');

Si nous voulons ajouter plusieurs fichiers de configuration, nous pouvons appeler la fonction addConfig() plusieurs fois. Si des éléments avec les mêmes clés apparaissent dans les fichiers, ils seront écrasés (ou dans le cas de tableaux, fusionnés). Un fichier inclus plus tard a une priorité plus élevée que le précédent.

La dernière étape consiste à créer le conteneur DI :

$container = $configurator->createContainer();

Et il créera les objets requis pour nous. Par exemple, si vous utilisez la configuration pour Nette Database, vous pouvez lui demander de créer des connexions à la base de données :

$db = $container->getByType(Nette\Database\Connection::class);
// ou
$explorer = $container->getByType(Nette\Database\Explorer::class);
// ou lors de la création de plusieurs connexions
$db = $container->getByName('database.main.connection');

Et maintenant vous pouvez travailler avec la base de données !

Mode développeur vs mode production

En mode développeur, le conteneur est automatiquement mis à jour à chaque fois que les fichiers de configuration sont modifiés. En mode production, il n'est généré qu'une seule fois et les modifications ne sont pas vérifiées. Le mode développeur est donc axé sur le confort maximal du programmeur, tandis que le mode production est axé sur la performance et le déploiement en production.

La sélection du mode se fait par autodétection, il n'est donc généralement pas nécessaire de configurer quoi que ce soit ou de basculer manuellement. Le mode est développeur si l'application est exécutée sur localhost (c'est-à-dire l'adresse IP 127.0.0.1 ou ::1) et qu'aucun proxy n'est présent (c'est-à-dire son en-tête HTTP). Sinon, elle s'exécute en mode production.

Si nous voulons activer le mode développeur dans d'autres cas, par exemple pour les programmeurs accédant depuis une adresse IP spécifique, nous utilisons setDebugMode() :

$configurator->setDebugMode('23.75.345.200');
// vous pouvez également spécifier un tableau d'adresses IP

Nous recommandons vivement de combiner l'adresse IP avec un cookie. Nous stockons un jeton secret, par exemple secret1234, dans le cookie nette-debug, et activons ainsi le mode développeur pour les programmeurs accédant depuis une adresse IP spécifique et ayant également le jeton mentionné dans le cookie :

$configurator->setDebugMode('secret1234@23.75.345.200');

Nous pouvons également désactiver complètement le mode développeur, même pour localhost :

$configurator->setDebugMode(false);

Paramètres

Dans les fichiers de configuration, vous pouvez également utiliser des paramètres, qui sont définis dans la section parameters.

Ils peuvent également être insérés de l'extérieur en utilisant la méthode addDynamicParameters() :

$configurator->addDynamicParameters([
	'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);

Le paramètre projectId peut être référencé dans la configuration en utilisant la notation %projectId%.

version: 3.x