Nous avons vu dans la précédente partie qu’il est possible de passer des paramètres de configuration au constructeur de l’application.
Dans cette partie nous allons voir comment améliorer le système de chargement de la configuration dans notre projet.
Voici ce que nous avons précédemment modifié en terme de configuration, en l’occurrence le paramètre debug
à true
:
//...
# Initialisation de l’application
$app = new Application\Application($loader, ['debug' => true]);
//...
En fait, ici nous avons écrasé le paramètre de configuration par défaut. En effet, Tao définit un ensemble de paramètres de configurations par défaut qui lui permettent de fonctionner correctement.
Ces paramètres de base se trouvent dans le fichier
vendor/forxer/tao/src/Tao/Configuration.php
.
Ouvrez donc ce fichier vendor/forxer/tao/src/Tao/Configuration.php
pour voir quels sont les paramètres de configuration de base dans Tao, paramètres que vous pouvez modifier dans votre propre configuration.
Ne modifiez jamais ce fichier de configuration par défaut, à chaque mise à jour vous perdriez vos modifications, utilisez les techniques décrites ci-dessous.
Évidement, vous pouvez définir vos propres paramètres de configuration en plus de ceux définit par défaut.
Au lieu de passer les paramètres de configuration directement au constructeur de l’application dans un tableau, il serait intéressant de les placer dans un fichier.
Pour commencer nous allons créer le fichier /Application/Config/config.php
:
<?php
return [
# The application identifier (used internally)
'app_id' => 'tuto',
# Enable/disable debug mode
'debug' => true
];
Ce fichier se contente de retourner le tableau de configuration avec nos valeurs personnalisées selon nos besoins.
Maintenant, nous allons modifier le front-controller pour que ce fichier soit chargé à la place du tableau passé directement au constructeur.
Fichier /web/app.php
<?php
# Chargement de l'autoload de composer
$loader = require __DIR__ . '/../vendor/autoload.php';
# Chargement de la configuration
$config = require __DIR__ . '/../Application/Config/config.php';
# Initialisation de l'application
$app = new Application\Application($loader, $config);
# Exécution de l'application
$app->run();
Maintenant, il serait souhaitable d’avoir plusieurs fichiers de configuration de façon à avoir différents profil de configuration selon l’environnement.
Renommez /Application/Config/config.php
en /Application/Config/prod.php
et modifiez le ainsi :
<?php
return [
# The application identifier (used internally)
'app_id' => 'tuto',
# Enable/disable debug mode
'debug' => false
];
On passe le paramètre debug
à false
en production.
Maintenant on créer un fichier /Application/Config/dev.php
qui contient :
<?php
$devConfig = [
# Enable/disable debug mode
'debug' => true
];
$config = require __DIR__ . '/prod.php';
return $devConfig + $config;
Ce fichier définit un nouveau tableau de paramètres de configuration et le fusionne aux paramètre de l’environnement de production. Ainsi dans l’environnement de développement, on passe la valeur paramètre debug
à true
.
Reste à modifier le fichier front-controller web/app.php
<?php
# Chargement de l'autoload de composer
$loader = require __DIR__ . '/../vendor/autoload.php';
# Chargement de la configuration
//$config = require __DIR__ . '/../Application/Config/prod.php';
$config = require __DIR__ . '/../Application/Config/dev.php';
# Initialisation de l'application
$app = new Application\Application($loader, $config);
# Exécution de l'application
$app->run();
Ici pour passer d’un environnement à un autre il suffit de commenter/dé-commenter l’une et l’autre ligne de chargement de la configuration.
On peut imaginer d’autres façons de passer d’un environnement à un autre de façon plus ou moins automatique, par exemple un test sur les variables d’environnement, un fichier app_dev.php, etc.
Nous avons vu comment la configuration de l’application était chargée et comment on pouvaient gagner en flexibilité en créant plusieurs fichiers de configuration.