Beforevalidate در هنگام ثبت نام

[rtl]با سلام

در بخش ثبت نام سایت من باید این امکان باشد که هر کاربری که زیرمجموعه خودش رو تعریف کند نام کاربری خودش قبل از نام کاربری جدید لحاظ شود. مثلا:

اگر نام کاربری که میخواهد عضو جدید ثبت نام کند manager باشد و نام کاربری عضو جدید هم test باشد، میخواهیم این اکانت جدیدی با username: manager_test ساخته شود.[/rtl]

[rtl]من اینکار رو با تابع beforevalidate انجام دادم و آنجا اضافه کردم که در قسمت پایین تابع رو مشاهده میفرمایید.

ولی برنامه من 3 بار این تابع رو فراخوانی میکند و چیزی که در نهایت در پایگاه داده ذخیره می شود هست: manager_manager_manager_test[/rtl]


protected function beforeValidate()

	{

		$this->username = Yii::app()->user->name.'_'.$this->username;

        return parent::beforeValidate();

	}

[rtl]برای حل این مشکل شما اساتید چه راه حلی رو پیشنهاد می کنید؟

با تشکر[/rtl]

از تابع

beforeSave()

استفاده کنید

[right][rtl][font="Tahoma"]

جناب نادی درست میگن، باید از beforeSave استفاده کنید

فقط توجه داشته باشید که beforeSave قبل از عملیات update هم فراخوانی میشه، و اگر اون کد رو مستقیما به کار ببرید با هر بار بروزرسانی مدل، نام کاربری ش عوش میشه

کافیه قبلش چک کنید که اگر مدل جدید هست اون کد لحاظ شه:

[/font][/rtl][/right]




if ($this->isNewRecord) {

 $this->username = Yii::app()->user->name.'_'.$this->username;

}



[rtl]خیلی ممنون از پاسخ دوستان محترم.

من از این روش استفاده کردم جواب گرفتم ولی پیغام خطایی که در صورت وارد کردن یک username تکراری دارم را نمیتوانم handle کنم و پیغام خطای زیر را دارم:[/rtl]

CDbException

خطای CDbCommand در اجرای SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘demo_ITC3’ for key ‘username’.

[right][rtl][font="Tahoma"]

برای این کار باید این قاعده رو به تابع rules مدل کاربران اضافه کنید:

[/font][/rtl][/right]




public function rules()

{

return array(

...

    array('username', 'unique'),

...

);

}




[right][rtl][font="Tahoma"]

اینطوری خود فریمورک خطای ورود اطلاعات اعلام میکنه

[/font][/rtl][/right]