Bonjour,

Je suis en train de réaliser un portail que je souhaite mettre à disposition de mes collègues de travail.

La partie installation sur le serveur se fera obligatoirement par un administateur réseau qui :

  • créera la base de données dans mysql
  • installera les fichiers nécessaires au portail sur le serveur avec le configuration d'un fichier config.php (host + root + password + nom de la table)
  • créera un nom de domaine sur l'intranet de l'entreprise pointant vers le portail

Pour le reste je souhaite que ça soit mes collégues qui puissent par eux-même renseigner les informations qui restent :

  • nom de portail
  • choix du logo dans une liste
    (et je crois que pour le moment c'est tout ce que j'ai en tête).

Je cherche une technique simple pour la mise en oeuvre, vu le peu d'information je pense que c'est inutile de créer une table dans ma base de données juste pour ça.

Si vous avez des idées toutes simples je suis preneur.

7 réponses


yanis-git
Réponse acceptée

Bonjour,

Tu peux utiliser plutôt la même library que laravel : https://github.com/vlucas/phpdotenv

ou simplement un système d'include classique.

//config.php
<?php
/**
  * A noter l'importance du return. 
  **/
return [
     'foo' => 'bar'
];

et ensuite on le récupère.

//SomeFile.php
<?php 
// [...]
$config = include('path/to/config.php');
// [...]

Tu auras le tableaux de configuration dans ta variable $config

Bonjour, pour ma part je pense qu'il vaut mieux créer une table pour car si tu te retrouve avec d'autres paramètre à rajouter tu pourra le faire plus simplement !

PLJerem
Auteur

Je vais essayer deux solutions :

  • celle de la base de donnée comme tu le tu le précises
  • j'ai aussi la technique pour écrire dans un fichier php avec des variables passées en "define"
PLJerem
Auteur

J'ai développé à partir de la formation POO du site.

Je viens de me lancer dans une autre technique qui me semble plus "adapatable".

J'ai créé un fichier config.ini.php qui contient les paramètres du portail :

/*
[portail_info]
PORTAIL_NAME = "MonPortail"
PORTAIL_DES = "Portail de l'atelier ..."

[atelier_info]
AT_CODE = "MYE"
AT_MATERIEL="MOTO"
AT_LIGNE="MONTAGE"
*/

Je récupére les informations dans mon fichier de configuration à partir d'une class ConfigApp :

class ConfigApp
{
    private static $_config;

    function __construct()
    {
        self::$_config = parse_ini_file(ROOT.'/app/config/config.ini.php');
    }

    public static function set($key, $val)
    {
        // A dév
    }

    public static function get($param=null)
    {
        return self::$_config[$param] ? self::$_config[$param] : null;
    }
}

Du coup, je vais piocher dans mon fichier de configuration directement avec le code ConfigApp::get('AT_CODE')

J'instancie la class ConfigApp dans le loader de mon App.

J'ai regardé pas mal de forum, je pense que c'est le plus simple.

Vous en pensez quoi ? Je pense que c'est quand même perfectible, je ne suis pas complétement convaincu sur ma mise en oeuvre...

PLJerem
Auteur

Merci Yanis-git.

Dans un premier temps je vais rester sur le bon vieux fichier config.php à inclure.

Si le besoin s'en ressent sur le long terme je passerai plutot par une class qui me permettra plus de souplesse.

Je pense aussi, rien ne t'empêche de faire une Class pour encapsuler tout ça. Basé sur ton Exemple ci desssus.

<?php

class Config
{
    protected $config;

    protected static $_instance = null;

    public function getInstance(){
        if(self::$_instance == null){
            self::$_instance = new Config();
        }
        return self::$_instance;
    }

    public function __construct(){
        $this->$config = parse_ini_file(ROOT.'/app/config/config.ini.php');
        //OU
        //$this->$config = include(ROOT.'/app/config/config.ini.php');
    }

    public function has($key){
        return isset($this->$config[$key]);
    }

    public static function get($param){
        if(!isset($this->config[$param])){
            throw new Exception("config key : $param must be defined", 1);

        }
        return $this->config[$param];
    }
}
//Usage
$foo = Config::getInstance()->get('foo'); // Return $foo|throw Exception.

// Usage with default value.
$foo = 'default';
if(Config::getInstance()->has('foo')){
    $foo = Config::getInstance()->get('foo');
}

Ici j'ai ajouté un Singleton (CF : methode : getInstance()) car tu souhaites ne parse qu'une seul fois ton fichier de configuration. Mais tu voudras le consulter plusieurs fois. C'est l'exemple typique d'un Singleton.

  • L'ajout d'une methode has permettant de vérifier l'existance d'un paramètre.
  • La suppression de la valeur par défaut du paramètre $paramde la méthode get. Il a, celon moi, aucun sens, on ne voudra jamais récuperer le paramètre null. De plus cela soulevera une fatal error de PHP. l'index null ne peut éxister.
  • Ajout d'une exception quand tu essayes de récupérer une config non set. Cela permet de prévenir les érreurs et d'avoir une trace de ce genre d'erreur.

Dans l'espoir que ça a put te guider.

PLJerem
Auteur

Du coup j'ai refait un petit visionnage de la formation : https://www.grafikart.fr/formations/programmation-objet-php/singleton, on a tendance à regarder toutes les vidéos d'un coup et à la fin on zappe pleins de techniques.

En effet, ca m'aide bien, plus j'avance plus je me rends compte que j'ai besoin de paramètres qui spécifiques à chaque portail et qui ne changeront jamais, l'utilisation d'un fichier de config est pratique.

L'utilisation d'une class est beaucoup plus propre dans l'écriture du code.

Pour rester simple dans la présentation du code j'avais mis le null par solution de facilitée. Enfin va falloir que je travaille ca aussi...

Merci encore.