I have to install this application in many place’s intranet, so creating a table to store this variables was a waste, also, I need to access easily this variables anywhere in the app.
So i created this model that stores its data in the config file instead of the database, take a look, enjoy, gimme advice… stuff
<?php
/**
- This is the model class for "something".
*/
class Config extends CFormModel
{
//En vez de usar activeRecord se puede usar CFormModel, Yii lo tiene para crear modelos que generan formularios
//pero que no se relaciona con una tabla
function __construct($scenario=''){
//aca traigo los datos anteriores del archivo donde los guarde
parent::__construct($scenario);
$c = include( Yii::app()->basePath .DIRECTORY_SEPARATOR . 'config' .DIRECTORY_SEPARATOR. 'local.php' );
$this->setAttributes( $c['params'], false);
//utilizo la llave params porque este arreglo está junto al arreglo de config de yii, así puedo acceder a las
//variables en toda la aplicación, pero es caprico
//hay que usar false, no estoy 100% seguro de porque
}
public $razon_social;
public $nit;
public $pais;
public $departamento;
public $ciudad;
public $direccion;
public $telefono;
public $email;
public $corredor_gtm;
//las propiedades y atributos hay que declararlas manual para poder acceder a ellas
/**
* @return array validation rules for model attributes.
*/
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('status', 'numerical', 'integerOnly'=>true),
//igual que en cualqueir modelo
);
}
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels()
{
return array (
'razon_social' => 'Razon Social',
'nit' => 'Nit o Rut',
'pais' => 'Páis',
'departamento' => 'Departamento',
'ciudad' => 'Ciudad',
//igual que en cualqueir modelo
);
}
public function save(){
// esta es la parte pro, hay que sobreescribir la función save para que guarde en un archivo en
//vez de guardar en la tabla.
// en mi caso lo que hice fue usar var_export para guardar el php de la declaracion del arreglo
//meterlo en el archivo, le pongo antes que return y asi lo puedo leer despues usando include($archivo)
//y cargarlo en una variable
$l = Yii::app()->basePath .DIRECTORY_SEPARATOR . 'config' .DIRECTORY_SEPARATOR. 'local.php' ;
$c = var_export($this->attributes, true);
$f = fopen($l,'w');
if($f === false){
fclose($f);
return false;
}
$c = "<?php
return array(
'params'=> ".$c. ",
);
";
if( fwrite($f,$c) === false) {
fclose($f);
return false;
}
fclose($f);
return true;
}
}