Galera, me tirem uma dúvida: Existe algum design pattern que fala que toda conexão com o banco deve ser singleton?
Como funciona isso com o YII?
veja esse método:
setActive:
public function setActive($value)
{
if($value!=$this->_active)
{
if($value)
$this->open();
else
$this->close();
}
}
Pelo o que eu entendi o CDBConnection SEMPRE abre uma nova conexão…é isso?
Eu tenho um problema, eu criei um CBehavior, ou CApplicationComponent, no qual conecta em um outro banco para fazer a integração…porém toda vez que o cara dá F5 na página ele reconecta com o banco! Eu consigo fazer uma gambiarra definindo um "singleton" guardando a variável dentro do Yii::app()->user->setState…gambiarra FEIA…mas mesmo assim funciona, porém…quando eu uso o createCommand, ele sempre abre uma nova conexão…=(
da uma olhada no método setActive, ele possui um if q verifica $this->_active e essa propriedade é alterada no método open() e no método close()
Só abre uma conexão se $this->_active for false e a $value for true, e fexa caso seja o contrário.
/**
* Opens DB connection if it is currently not
* @throws CException if connection fails
*/
protected function open()
{
if($this->_pdo===null)
{
if(empty($this->connectionString))
throw new CDbException(Yii::t('yii','CDbConnection.connectionString cannot be empty.'));
try
{
Yii::trace('Opening DB connection','system.db.CDbConnection');
$this->_pdo=$this->createPdoInstance();
$this->initConnection($this->_pdo);
$this->_active=true;
}
catch(PDOException $e)
{
if(YII_DEBUG)
{
throw new CDbException(Yii::t('yii','CDbConnection failed to open the DB connection: {error}',
array('{error}'=>$e->getMessage())),(int)$e->getCode(),$e->errorInfo);
}
else
{
Yii::log($e->getMessage(),CLogger::LEVEL_ERROR,'exception.CDbException');
throw new CDbException(Yii::t('yii','CDbConnection failed to open the DB connection.'),(int)$e->getCode(),$e->errorInfo);
}
}
}
}