تالار گفتمان nCIS.ir

نسخه‌ی کامل: نحوه تولید ارور دلخواه و نمایشش اون در ویو
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام.
استاد نحوه تولید ارور دلخواه و نمایشش اون در ویو چجوریه؟
مثلا برای فروم های اینجوری استفاده میکنیم
<?php echo $form->error($model,'rememberMe'); ?>
حالا فرض کنید ما میخوایم اگه یه کاربر از قبل ثبت نام کرده بود ارور مورد نظر رو نمایش بدیم و یگیم شما ثبت نام کردید و ادامه عملیات متوقف بشه.
if(isset($_POST['Doreregister'])){
                $model->attributes = $_POST['Doreregister'];
                if($x = Doreregister::model()->find(array(
                    'condition'=>'user_id=:userID AND dore_id=:doreID',
                    'params'=>array(':userID'=>$user->id,':doreID'=>$model->dore_id),
                ))){
                    throw new CHttpException(404, 'این کاربر قبلا در این دوره ثبت نام کرده است');
                }
                $model->ts = time();
                $model->flag = '1';
                $model->user_id = $user->id;
                if($model->save()){
                    $this->redirect(array('index'));
                }else{
                }
            }
به جای
 throw new CHttpException(404, 'این کاربر قبلا در این دوره ثبت نام کرده است');
از چی استفاده کنم؟
البته برای این کار شما (وجود کاربر از قبل) اعتبارسنجیهای خود Yii وجود داره. مثال:
public function rules()
{
    return array(
        // ...
        array('username', 'unique'),
    );
}
ولی اگه بخواین کلاً خطایی رو به یکی از فیلدهای مدل اختصاص بدین، میتونید این شکلی کار کنید:
$model->addError('username', 'این کاربر قبلاً ثبت نام کرده است.');
اینطوری، چون مدل شما خطا داره، دیگه ثبت نام نمیشه. البته از اونجا که موقع استفاده از متد save روی مدل، دوباره validation اعمال میشه و خطای تولیدشده شما بصورت دستی حذف میشه، ذخیره کردن مدل رو بجای این حالت:
if($model->save()) { ... }
باید این شکلی کنید:
if(!$model->hasErrors() && $model->save()) { ... }
استاد من توی tools اومدم یه تابع نوشتم که یه وردی بهش میدم و خطامو ترجمه میکنه.
بعد اومدم تو کنترلرم اینجوری نوشت
$this->redirect(array('doreregister/create','id'=>$user->id,'msg'=>20));
و ارور دلخواهمو با متد گت میفرستم به ویو و اونجا ترجمش میکنم.
اما یه مشکلی وجود داره که وقتی ریدایرکت میشه کل محتوای فرمم پام میشه و کار مجددا باید اطلاعاتشو وارد کنه.
برای حل این مشکل چیکار کنم؟
***
راستی ادیتور پیاخ سری هم یه تکت اریا سادست تو انجمن
از لینک پاسخ جدید استفاده کنید تا ادیتور رو داشته باشین. روشی که برای نمایش خطا انتخاب کردین درست نیست. بهتره از Flash Message ها استفاده کنید.