Regrouper des variables de configuration

Il est toujours utile de centraliser les variables de configuration d’un site dans un fichier unique. Nous pourrions utiliser les constantes proposées par le langage PHP (identifiants de valeurs simples accessibles à tout endroit d’un script), mais CakePHP propose un moyen plus simple et plus pratique.

1. Le fichier config/bootstrap.php

Le répertoire {app}/config/ contient un fichier nommé bootstrap.php. CakePHP le lit juste après s’être intialisé, c’est donc l’endroit idéal pour placer nos variables de configuration. Ouvrons-le dans un éditeur et commençons par saisir quelques variables qui seront utiles par la suite, sous la forme “valeur” ou “indice.valeur_1″, “indice.valeur_2″ :

1
2
3
4
5
6
7
8
9
10
// {app}/config/bootstrap.php
 
// Nom du site
Configure::write('site.nom', 'Mon site');
 
// Email de l'administrateur
Configure::write('site.adminEmail', 'contact@monsite.com');
 
// Nombre d'actualités par page
Configure::write('actus.nbParPage', 10);

2. Lecture des variables de configuration

Maintenant que nous avons défini nos variables, nous pouvons y accéder depuis les Modèles, les Contrôleurs et les Vues.

Notre configuration contient pour l’instant 3 informations : le nom du site, que nous afficherons dans la têtière de page, l’email de l’administrateur que nous afficherons dans le pied de page, et le nombre d’actualités par page, que nous utiliserons dans le Contrôleur Actualites.

1
2
3
4
5
6
7
8
9
10
11
12
// {app}/views/layouts/default.ctp
<div id="header">
  <?php e(Configure::read('site.nom')); ?>
</div>
 
<?php e($content_for_layout); ?>
 
<div id="footer">
  <a href="mailto:<?php e(Configure::read('site.adminEmail')); ?>">
    Contacter le Webmaster
  </a>
</div>

Ainsi sur chaque page de notre site, nous aurons bien le nom du site et l’email du webmaster affichés.

La dernière variable de configuration concerne les actualités, nous n’en avons besoin que dans la page qui affiche une liste d’actualités. Cette valeur est à destination du contrôleur et non de la Vue, cette fois. Voyons donc le Contrôleur Actualites et son action index qui sélectionne les actualités par date décroissante et les affiche :

1
2
3
4
5
6
7
8
9
10
// {app}/controllers/actualites_controller.php
function index()
{
  $this->paginate = array(
    'order' => 'Actualite.created DESC',
    'limit' => Configure::read('actus.nbParPage'),
    'page' => 1
   );
   $this->set('actualites', $this->paginate('Actualite'));
}

Si demain notre client nous appelle pour changer l’email du webmaster ou le nombre d’actualités par page, nous n’avons qu’un seul fichier de paramètres à modifier.

4. Double Configuration

Nous avons vu dans l’article précédent qu’il était pratique de gérer une double configuration locale / en ligne, nous pouvons appliquer le même principe dans notre fichier de configuration :

1
2
3
4
5
6
7
8
9
10
// {app}/config/config.php
 
if(env('REMOTE_ADDR') == '127.0.0.1')
{
  Configure::write('site.adminEmail', 'test@monsite.com');
}
else
{
  Configure::write('site.adminEmail', 'client@monsite.com');
}

Grâce à cette configuration double, nous pouvons par exemple tester un formulaire de contact en local puis le mettre à jour en ligne sans avoir à nous souvenir si nous avons bien indiqué le bon destinataire dans le Contrôleur qui envoie l’email, que ce soit en ligne ou en local.

Pierre-Emmanuel Fringant

Participez