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%
.