Yii Framework Forum: Penggunaan beforeValidate() - Yii Framework Forum

Jump to content

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

Penggunaan beforeValidate() sharing penggunaan beforeValidate Rate Topic: -----

#1 User is offline   saebaryo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 74
  • Joined: 13-October 10
  • Location:jogjakarta - Indonesia

Posted 11 December 2010 - 01:29 PM

mau nanya nih gan...;D

langsung saja kasusnya:
misal saya akan membatasi nilai maksimal yang diperbolehkan untuk di insert, tetapi nilai akan berubah secara dinamis sesuai dengan persediaan yang masih ada. pertama saya deklarasikan variable di dalam class model
private $maxOut = 0;


lalu di rules() diatur
array('jumlah', 'numerical', 'integerOnly'=>true, 'max'=>$this->maxOut, 'tooBig'=>'Pengeluaran melebihi persediaan.'),


saya pikir sebelum rules() di eksekusi tentu sudah harus merubah nilai $this->maxOut dengan jumlah persediaan yang masih tersisa. untuk itu sekarang saya gunakan beforeValidate()
protected function beforeValidate()
{
  	if( !empty($_POST['namaModel']['namafield'] ) ) 
  	{
   	  // !empty digunakan u/ mengecek karena rules() belum dieksekusi
     	// $_POST['namaModel']['namafield']  saya gunakan sbg parameter query
   	  //code untuk mengambil nilai dari tabel.
   	  $this->maxOut =  $persediaan - $pengeluaran;
  	}
  	return true; 
 	
}


kok $this->maxOut nya belum berubah ya gan?
masih terisi nilai 0.
everything must standing on balance
0

#2 User is offline   saebaryo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 74
  • Joined: 13-October 10
  • Location:jogjakarta - Indonesia

Posted 12 December 2010 - 10:42 AM

upss.. sori gan, untuk kasus saya penggunaan beforeValidate() keknya gak tepat deh. ;D
untuk kasus seperti

View Postsaebaryo, on 11 December 2010 - 01:29 PM, said:

langsung saja kasusnya:
misal saya akan membatasi nilai maksimal yang diperbolehkan untuk di insert, tetapi nilai akan berubah secara dinamis sesuai dengan persediaan yang masih ada.


lebih baik merubah nilai maximal input langsung saja di rules()
public function rules()
{
if( !empty($_POST['namaModel']['namafield'] ) ) 
   	{
      	// !empty digunakan u/ mengecek karena rules() belum dieksekusi
  		// $_POST['namaModel']['namafield']  saya gunakan sbg parameter  query
      	//code untuk mengambil nilai dari tabel.
      	$this->maxOut =  $persediaan - $pengeluaran;
   	}
return array(
.........
array('jumlah', 'numerical', 'integerOnly'=>true,  'max'=>$this->maxOut, 'tooBig'=>'Pengeluaran melebihi  persediaan.'),
.........
};
}


kalo dengan cara sebelumnya tentu saja nilai $this->maxOut hanya berubah di dalam fungsi itu sendiri(paham setelah minum segelas kopi arabica dicampur robusta) :P

nah mungkin dari pengalaman para suhu sekalian ada yang pernah menggunakan fungsi beforeValidate(), mohon share ya gan, ane lagi penasaran penggunaan fungsi itu dalam kasus2 seperti apa. :lol:
everything must standing on balance
0

#3 User is offline   YII alvs 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 53
  • Joined: 11-February 10

Posted 12 December 2010 - 09:23 PM

View Postsaebaryo, on 12 December 2010 - 10:42 AM, said:

upss.. sori gan, untuk kasus saya penggunaan beforeValidate() keknya gak tepat deh. ;D
untuk kasus seperti


lebih baik merubah nilai maximal input langsung saja di rules()
public function rules()
{
if( !empty($_POST['namaModel']['namafield'] ) ) 
   	{
      	// !empty digunakan u/ mengecek karena rules() belum dieksekusi
  		// $_POST['namaModel']['namafield']  saya gunakan sbg parameter  query
      	//code untuk mengambil nilai dari tabel.
      	$this->maxOut =  $persediaan - $pengeluaran;
   	}
return array(
.........
array('jumlah', 'numerical', 'integerOnly'=>true,  'max'=>$this->maxOut, 'tooBig'=>'Pengeluaran melebihi  persediaan.'),
.........
};
}


kalo dengan cara sebelumnya tentu saja nilai $this->maxOut hanya berubah di dalam fungsi itu sendiri(paham setelah minum segelas kopi arabica dicampur robusta) :P

nah mungkin dari pengalaman para suhu sekalian ada yang pernah menggunakan fungsi beforeValidate(), mohon share ya gan, ane lagi penasaran penggunaan fungsi itu dalam kasus2 seperti apa. :lol:


bagaimana kalau dicoba beforesave, afterfind, terus aftersave kemudian dibuat kondisi di CDbCriteria..
kalau aku lihat ada hubungan tabel persedian dan pengeluaran
setau ku untuk beforevalidate hanya mengacu pada private model AR nya
0

#4 User is offline   saebaryo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 74
  • Joined: 13-October 10
  • Location:jogjakarta - Indonesia

Posted 13 December 2010 - 02:23 AM

saya penginnya user mendapat konfirmasi ketika dia selesai men submit form, oleh karena itu diawal saya mikirnya pake beforeValidate() yang akan melakukan validasi sebelum validasi rules() dieksekusi dan saya taunya $_POST['....'] hanya bisa didapat oleh fungsi2 beforeXX atau afterXX. Mungkin karena memang itu hanya mengacu pada private model AR nya ya bro?

kalo beforeSave(), berarti dia telah melewati rules() sehingga kalo input user melebihi dari batas maksimal yang ditentukan harus melakukan langkah panjang untuk mengembalikan user form sebelumnya dan itupun masih harus mensetting messagenya.

untuk query table sejauh ini masih bisa saya lakukan.
hubungan secara langsung tidak terjadi di table persediaan dan pengeluaran, tapi kedua table tersebut berelasi di table transaksi.
everything must standing on balance
0

#5 User is offline   YII alvs 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 53
  • Joined: 11-February 10

Posted 13 December 2010 - 02:43 AM

View Postsaebaryo, on 13 December 2010 - 02:23 AM, said:

saya penginnya user mendapat konfirmasi ketika dia selesai men submit form, oleh karena itu diawal saya mikirnya pake beforeValidate() yang akan melakukan validasi sebelum validasi rules() dieksekusi dan saya taunya $_POST['....'] hanya bisa didapat oleh fungsi2 beforeXX atau afterXX. Mungkin karena memang itu hanya mengacu pada private model AR nya ya bro?

kalo beforeSave(), berarti dia telah melewati rules() sehingga kalo input user melebihi dari batas maksimal yang ditentukan harus melakukan langkah panjang untuk mengembalikan user form sebelumnya dan itupun masih harus mensetting messagenya.

untuk query table sejauh ini masih bisa saya lakukan.
hubungan secara langsung tidak terjadi di table persediaan dan pengeluaran, tapi kedua table tersebut berelasi di table transaksi.


justru karena ada relasi antar table maka perlu beforesave / afterfind terus di normalize
public function normalizeTags($attribute,$params)
{
$this->tags=Tag::array2string(array unique(Tag::string2array($this->tags)));
}


direlasi tabel dibuat
public function relations()
{
return array(
'author' => array(self::BELONGS TO, 'User', 'author id'),
'comments' => array(self::HAS MANY, 'Comment', 'post id',
'condition'=>'comments.status='.Comment::STATUS APPROVED,
'order'=>'comments.create time DESC'),
'commentCount' => array(self::STAT, 'Comment', 'post id',
'condition'=>'status='.Comment::STATUS APPROVED),
);
}


trs rules jg dibuat

public function rules()
{
return array(
array('title, content, status', 'required'),
array('title', 'length', 'max'=>128),
array('status', 'in', 'range'=>array(1,2,3)),
array('tags', 'match', 'pattern'=>'/^[nwns,]+$/',
'message'=>'Tags can only contain word characters.'),}

0

#6 User is offline   aqge 

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

Posted 22 December 2010 - 05:38 AM

View PostYII alvs, on 13 December 2010 - 02:43 AM, said:

justru karena ada relasi antar table maka perlu beforesave / afterfind terus di normalize
public function normalizeTags($attribute,$params)
{
$this->tags=Tag::array2string(array unique(Tag::string2array($this->tags)));
}


direlasi tabel dibuat
public function relations()
{
return array(
'author' => array(self::BELONGS TO, 'User', 'author id'),
'comments' => array(self::HAS MANY, 'Comment', 'post id',
'condition'=>'comments.status='.Comment::STATUS APPROVED,
'order'=>'comments.create time DESC'),
'commentCount' => array(self::STAT, 'Comment', 'post id',
'condition'=>'status='.Comment::STATUS APPROVED),
);
}


trs rules jg dibuat

public function rules()
{
return array(
array('title, content, status', 'required'),
array('title', 'length', 'max'=>128),
array('status', 'in', 'range'=>array(1,2,3)),
array('tags', 'match', 'pattern'=>'/^[nwns,]+$/',
'message'=>'Tags can only contain word characters.'),}




bro ane bingung sama penjelasan yang ini, kok tidak ada persediaan dan pengeluarannya...
coba baca lagi ah..
Best Regard
Tidak ada coding yang salah
Yang ada hanyalah Coding yang lebih baik
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