تغییر قوانین اعتبارسنجی به صورت پویا در کیک پی اچ پی

یکی از امکانات جدید اضافه شده در نسخه ۲٫۲ از کیک پی اچ پی امکان تغییر قوانین تعریف شده در Model به صورت داینامیک از طریق متد validator که در Model پیاده سازی شده است می باشد. در این پست به بررسی این ویژگی جدید می پردازیم .

در ابتدای کار فرض می کنیم در model قوانین زیر رو تعریف کردیم :

class User extends AppModel{

	public $validate = array(
		'username'=>array(
			'rule-1'=>array(
				'rule'=>'notEmpty',
				'required'=>TRUE,
				'message'=>'لطفا نام کاربری خود را وارد کنید'
			),
			'rule-2'=>array(
				'rule'=>'isUnique',
				'message'=>'نام کاربری وارد شده تکراری است',
				'on'=>'create'
			),
		),
		'password'=>array(
			'rule'=>'notEmpty',
			'required'=>TRUE,
			'message'=>'لطفا رمزعبور خود را وارد کنید'
		),
	);

}

اضافه کردن قانون جدید :
برای اضافه کردن قانون جدید از متد add استفاده می کنیم

$this->validator()->add('password','rule-2',array(
		'rule'=>'alphaNumeric',
		'message'=>'رمزعبور تنها باید شامل حروف و اعداد باشد'	
));

همچنین می توانیم از روش method chaining استفاده کنیم و متد add رو چندین بار فراخوانی کنیم .

$this->validator()
	->add('password','rule-2',array(
		'rule'=>'alphaNumeric',
		'message'=>'رمزعبور تنها باید شامل حروف و اعداد باشد'
	))
	->add('password','rule-3',array(
		'rule'=>array('minLength',6)
		'message'=>'رمزعبور حداقل باید شامل ۶ کاراکتر باشد'
	));

به جای روش بالا می توانیم به صورت زیر هم عمل کنیم و قوانین جدید رو به صورت آرایه به عنوان پارامتر دوم به متد پاس بدیم

$this->validator()
	->add('password',array(
		'rule-2'=>array(
		'rule'=>'alphaNumeric',
		'message'=>'رمزعبور تنها باید شامل حروف و اعداد باشد'
		),
		'rule-3'=>array(
			'rule'=>array('minLength',6)
			'message'=>'رمزعبور حداقل باید شامل ۶ کاراکتر باشد'
		)
	));

ویرایش قوانین موجود :

برای مثال قانون rule-2 از فیلد password  رو می خواهیم ویرایش کنیم

$this->validator()->getField('password')->setRule('rule-2',array(
		'rule'=>'numeric',
		'message'=>'رمزعبور باید تنها شامل اعداد باشد'
	)
);

و برای تغییر تمامی قوانین تعریف شده برای یک فیلد با استفاده از متد setRules داریم :

$this->validator()->getField('password')->setRules(array(
		'required'=>array(
			'rule'=>'notEmpty',
			'required'=>TRUE,
			'message'=>'رمزعبور خود را وارد کنید'
		),
		'length'=>array(
			'rule'=>array('between',6,12),
			'message'=>'رمزعبور باید شامل حداقل ۶ و حداکثر ۱۲ کاراکتر باشد'
		)
	)
);

همچنین اگر فقط بخوایم یک بخش از قانون تعریف شده رو تغییر بدیم :

$this->validator()->getField('password')->getRule('length')->message='رمزعبور وارد شده معتبر نیست';

حذف قوانین :

قطعه کد زیر قوانین تعریف شده برای فیلد password رو به طور کلی پاک میکنه .

$this->validator()->remove('password');

و کد زیر قانون length رو از بین قوانین تعریف شده برای فیلد password حذف میکنه

$this->validator()->remove('password','length');

اگر از کنترلر بخواهیم به این متد دسترسی داشته باشیم،برای مثال در کدهایی که توی این پست تعریف کردیم،به شکل زیر عمل می کنیم

$this->User->validator()->remove('password','length');

//other sample
$this->User->validator()->getField('password')->setRules(array(
		'required'=>array(
			'rule'=>'notEmpty',
			'required'=>TRUE,
			'message'=>'رمزعبور خود را وارد کنید'
		)
	)
);

امیدوارم این پست مفید بوده باشه ، موفق باشید .


تا كنون ۵ نظر برای اين پست ثبت شده است


  1. صالح گقته :

    مثل همیشه عالی. سپاس

    ۲۸ خرداد ۱۳۹۲ در ۴:۲۲ ب.ظ

  2. alireza گقته :

    سایت خوبی دارید
    موفق باشید

    ۱۶ دی ۱۳۹۲ در ۱:۴۹ ب.ظ

  3. خرید گقته :

    مطالبتون مفیده . آرزوی موفقیت دارم

    ۱۱ خرداد ۱۳۹۳ در ۴:۳۸ ب.ظ

  4. طراح سایت گقته :

    توضیح بسیار خوب دادید ممنون

    ۴ آبان ۱۳۹۳ در ۱۱:۴۱ ق.ظ

  5. قاسم گقته :

    مرسی عالی بود ممنونم

    ۱۹ اردیبهشت ۱۳۹۴ در ۲:۲۸ ب.ظ