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!