agan-agan mohon penjelasan, link, petunjuk, atau apa saja yang bisa saya telusuri/pelajari
tentang bagaimana menangani error yang raise dari DB,
misalnya kalo ada pesan "… duplicate entry…" ingin saya ganti dengancustom message atau action lainya, atau pesan "… server has gone away…" dan banyak lagi…
protected function validateAttribute($object,$attribute)
{
$value=$object->$attribute;
if($this->allowEmpty && $this->isEmpty($value))
return;
$className=$this->className===null?get_class($object):Yii::import($this->className);
$attributeName=$this->attributeName===null?$attribute:$this->attributeName;
$finder=CActiveRecord::model($className);
$table=$finder->getTableSchema();
if(($column=$table->getColumn($attributeName))===null)
throw new CException(Yii::t('yii','Table "{table}" does not have a column named "{column}".',
array('{column}'=>$attributeName,'{table}'=>$table->name)));
$columnName=$column->rawName;
$criteria=new CDbCriteria(array(
'condition'=>$this->caseSensitive ? "$columnName=:value" : "LOWER($columnName)=LOWER(:value)",
'params'=>array(':value'=>$value),
));
if($this->criteria!==array())
$criteria->mergeWith($this->criteria);
if(!$object instanceof CActiveRecord || $object->isNewRecord || $object->tableName()!==$finder->tableName())
$exists=$finder->exists($criteria);
else
{
$criteria->limit=2;
$objects=$finder->findAll($criteria);
$n=count($objects);
if($n===1)
{
if($column->isPrimaryKey) // primary key is modified and not unique
$exists=$object->getOldPrimaryKey()!=$object->getPrimaryKey();
else // non-primary key, need to exclude the current record based on PK
$exists=$objects[0]->getPrimaryKey()!=$object->getPrimaryKey();
}
else
$exists=$n>1;
}
[b]if($exists)
{
$message=$this->message!==null?$this->message:Yii::t('yii','{attribute} "{value}" has already been taken.');
$this->addError($object,$attribute,$message,array('{value}'=>$value));
}[/b]
}
tapi kalo langsung ganti disitu kayaknya berhenti sampai disitu perjalanan…
apa ada cara yang lebih sehat, sepertinya overide terlalu banyak kerja…
Klo ga salah kita bisa add error message tersendiri,
contohnya di rules() kita bisa tambahkan message buatan kita sendiri
array('NIK', 'unique', 'on'=>'insert,update,signup', 'message'=>'Login name already in used'),
coba liat di manual.
misalnya model pegawai(class turunan) memanggil class CActiveRecord, di CActiveRecord(liat di manual) ada fungsi namanya rules(), rules() ini memanggil class CValidator, di dalam class CValidator ada properties yg mengatur error namanya message dgn type string, nah disinilah kita bisa mengatur custom error message kita.
untuk kelas yg lain coba liat apakah properties message ini diturunkan atau tidak.
klo mau modify core-nya framework langsung, saya kira kurang bijaksana… apalagi kalau nanti keluar versi terbaru. klo mau ya diturunkan saja class-nya.