Parametri Di Yii Su Macchine Diverse

Dunque,

ho spesso condiviso con altri i progetti, tramite github.

Il che significa che il mio main.php dentro config doveva essere cambiato a ogni pull o da me o da altri…

Al che ho trovato questa soluzione, ditemi voi se ce n’era una più semplice (magari nativa)…

Genero i parametri da un file di testo, tramite una classe




class Configurami {

 

       protected $config = false;

       protected $filename;

 

       public function __construct($fileName = 'params')

       {

           $this->filename = $fileName;

           $this->elaboraParametri();

       }

 

       protected function elaboraParametri()

       {

 

           if (is_array($this->config)) {

               return $this->config;

           }

           $file = __DIR__ . DIRECTORY_SEPARATOR . $this->filename;

            try {

                   self::leggiParametri($file);

               } catch (DomainException $e) {

               Yii::log($e);

               }

 

           return true;

       }

 

       protected function leggiParametri($fileconf)

       {

           if (file_exists($fileconf)) {

               $conf_file  = file_get_contents($fileconf);

               $conf_array = explode("\n", $conf_file);

               $arrayConf = array();

 

               foreach ($conf_array as $riga_conf) {

                   $rc = explode('=', $riga_conf);

                   if (substr($rc[0], 0, 1) != '#') {

                       if ($rc[1] == 'true'){

                           $rc[1] = true;

                       }

                       if ($rc[1] == 'false'){

                           $rc[1] = false;

                       }

                       $arrayConf[$rc[0]] = $rc[1];

                   }

               }

 

               $this->config = $arrayConf;

 

           } else {

               throw new DomainException('errore di lettura nel file parametri');

           }

       }

 

       protected function controllaESettaIlParametro($valore, $valoreStandard = '')

       {

           if (!$this->config){

               $this->elaboraParametri();

           }

 

           if (!isset($this->config[$valore])){

              $this->config[$valore] = $valoreStandard;

           }

 

           return $this->config[$valore];

       }

 

       public function getTema()

       {

           return $this->controllaESettaIlParametro('theme', '..');

       }

 

       public function DBconfigure()

       {

           return array(

               'connectionString'   => 'mysql:host=' . $this->getDbHost() . ';dbname=' . $this->getDbName(),

               'emulatePrepare'     => $this->getEmulatePrepare(),

               'username'           => $this->getDbUser(),

               'password'           => $this->getDbPass(),

               'charset'            => $this->getCharset(),

               'tablePrefix'        => $this->getTablePrefix(),

               'enableParamLogging' => $this->getEnableParamLogging(),

               'enableProfiling'    => $this->getEnableProfiling(),

           );

       }

 

     // eccetera eccetera...

   }



e nel mio main faccio così:





include 'params/Configurami.php';

$configura = new Configurami();

return array(

//...

'theme'=> $configura->getTema(),

'language' => $configura->getLanguage(),

//...

// application components

'components'=>array(

//...

'db' => $configura->DBconfigure(),

//...



Qui trovate la classe zippata con i file dei parametri.

params va messo nel .gitignore, per tenerci i propri dati, params.dist è quello dove scrivere tutti i parametri necessari.

Per ora gestisce i parametri scritti uno per riga, separati da un =, come dire

PARAMETRO1=VALORE etc

e salta i commenti fatti con #

Insomma a me è sembrato utile… almeno come studio!