Nette Bootstrap

Les différents composants de Nette se règlent à l'aide de fichiers de configuration. Nous allons montrer comment charger ces fichiers.

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

Les fichiers de configuration s'écrivent d'ordinaire au format NEON et s'éditent le mieux dans des éditeurs qui le prennent en charge. On peut les voir comme un mode d'emploi indiquant comment créer et configurer des objets. Le résultat du chargement d'une configuration est donc ce qu'on appelle une fabrique, un objet qui crée à la demande les autres objets que vous voulez utiliser. Une connexion à la base de données, par exemple.

Cette fabrique est aussi appelée conteneur d'injection de dépendances (conteneur DI) et, si les détails vous intéressent, lisez le chapitre sur l'injection de dépendances.

Le chargement de la configuration et la création du conteneur sont assurés par la classe Nette\Bootstrap\Configurator ; nous installons donc d'abord son paquet nette/bootstrap :

composer require nette/bootstrap

Puis nous créons une instance de la classe Configurator. Comme le conteneur DI généré sera mis en cache sur le disque, il faut indiquer le chemin du répertoire où l'enregistrer :

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

Sous Linux ou macOS, donnez les droits d'écriture au répertoire temp/.

Venons-en aux fichiers de configuration eux-mêmes. Nous les chargeons avec addConfig() :

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

Si vous voulez ajouter plusieurs fichiers de configuration, vous pouvez appeler la fonction addConfig() plusieurs fois. Si des éléments de même clé apparaissent dans plusieurs fichiers, ils sont écrasés (ou fusionnés dans le cas des tableaux). Le fichier ajouté en dernier a la priorité sur le précédent.

La dernière étape est la création du conteneur DI :

$container = $configurator->createContainer();

Et celui-ci créera pour nous les objets voulus. Si vous utilisez par exemple la configuration de Nette Database, vous pouvez lui demander de créer les connexions à la base :

$db = $container->getByType(Nette\Database\Connection::class);
// or
$explorer = $container->getByType(Nette\Database\Explorer::class);
// or when creating multiple connections
$db = $container->getByName('database.main.connection');

Et vous voilà prêt à travailler avec la base de données !

Mode développement et mode production

En mode développement, le conteneur est automatiquement mis à jour dès que les fichiers de configuration changent. En mode production, il n'est généré qu'une fois et les changements ne sont pas vérifiés. Le mode développement vise donc le confort maximal du programmeur, tandis que le mode production vise la performance et le déploiement.

Le choix du mode se fait par détection automatique : il n'y a en général rien à configurer ni à basculer à la main. Le mode est celui du développement si l'application tourne sur localhost (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 tourne en mode production.

Si nous voulons activer le mode développement dans d'autres cas, par exemple pour les programmeurs qui se connectent depuis une adresse IP donnée, utilisez setDebugMode() :

$configurator->setDebugMode('23.75.345.200');
// an array of IP addresses can also be specified

Nous recommandons vivement de combiner l'adresse IP avec un cookie. Stockez un jeton secret, par ex. secret1234, dans le cookie nette-debug. Vous activez ainsi le mode développement pour les programmeurs qui se connectent depuis une adresse IP donnée et qui ont en plus ce jeton dans leur cookie :

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

Nous pouvons aussi désactiver complètement le mode développement, y compris sur localhost :

$configurator->setDebugMode(false);

Paramètres

Vous pouvez aussi utiliser dans les fichiers de configuration des paramètres, définis dans la section parameters.

Ils peuvent également être injectés de l'extérieur par la méthode addDynamicParameters() :

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

Le paramètre remoteIp se référence dans la configuration par l'écriture %remoteIp%.

Si vous passez à une version plus récente, consultez la page mise à niveau.

version: 3.x