Yii Framework Forum: handling DB error message - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

handling DB error message menangani error dari database Rate Topic: -----

#1 User is offline   aqge 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 188
  • Joined: 02-September 10
  • Location:Indonesia

Posted 18 October 2010 - 04:02 AM

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....


mohon petunjuk agan-agan,
Best Regard
Tidak ada coding yang salah
Yang ada hanyalah Coding yang lebih baik
0

#2 User is offline   aqge 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 188
  • Joined: 02-September 10
  • Location:Indonesia

Posted 18 October 2010 - 04:22 AM

View Postaqge, on 18 October 2010 - 04:02 AM, said:

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....


mohon petunjuk agan-agan,


sepertinya ketemu source-nya, ini nih ada disini...
yii\framework\validators\uniqueValidator.php

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...
Best Regard
Tidak ada coding yang salah
Yang ada hanyalah Coding yang lebih baik
0

#3 User is offline   fastcrash 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 245
  • Joined: 10-March 10
  • Location:South Jakarta

Posted 19 October 2010 - 10:17 PM

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.

he heee.. semoga membantu. Posted Image
0

#4 User is offline   aqge 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 188
  • Joined: 02-September 10
  • Location:Indonesia

Posted 19 October 2010 - 10:34 PM

View Postfastcrash, on 19 October 2010 - 10:17 PM, said:

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.

he heee.. semoga membantu. Posted Image


ok trims, akan saya coba, dan mengabari hasilnya...
wish me luck
Best Regard
Tidak ada coding yang salah
Yang ada hanyalah Coding yang lebih baik
0

#5 User is offline   fastcrash 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 245
  • Joined: 10-March 10
  • Location:South Jakarta

Posted 19 October 2010 - 11:12 PM

Bisa juga mengatur nya di errorhandler config/main.php
'errorHandler'=>array(
	// use 'site/error' action to display errors
        'errorAction'=>'site/error'
),


track bacanya di manual:
CWebApplication -> errorHandler(properties) -> CErrorHandler -> error(properties:array) -> message(properties:the error message)

begitu juga kalou mau track turunan properties dari class yg lain, kita liat dulu induk kelasnya.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users