در بخش ثبت نام سایت من باید این امکان باشد که هر کاربری که زیرمجموعه خودش رو تعریف کند نام کاربری خودش قبل از نام کاربری جدید لحاظ شود. مثلا:
اگر نام کاربری که میخواهد عضو جدید ثبت نام کند 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]برای حل این مشکل شما اساتید چه راه حلی رو پیشنهاد می کنید؟
جناب نادی درست میگن، باید از beforeSave استفاده کنید
فقط توجه داشته باشید که beforeSave قبل از عملیات update هم فراخوانی میشه، و اگر اون کد رو مستقیما به کار ببرید با هر بار بروزرسانی مدل، نام کاربری ش عوش میشه
کافیه قبلش چک کنید که اگر مدل جدید هست اون کد لحاظ شه:
[/font][/rtl][/right]
if ($this->isNewRecord) {
$this->username = Yii::app()->user->name.'_'.$this->username;
}
من از این روش استفاده کردم جواب گرفتم ولی پیغام خطایی که در صورت وارد کردن یک username تکراری دارم را نمیتوانم handle کنم و پیغام خطای زیر را دارم:[/rtl]
CDbException
خطای CDbCommand در اجرای SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘demo_ITC3’ for key ‘username’.