رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نحوه تولید ارور دلخواه و نمایشش اون در ویو
#1
سلام.
استاد نحوه تولید ارور دلخواه و نمایشش اون در ویو چجوریه؟
مثلا برای فروم های اینجوری استفاده میکنیم
<?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, 'این کاربر قبلا در این دوره ثبت نام کرده است');
از چی استفاده کنم؟
پاسخ
تشکر شده توسط:
#2
البته برای این کار شما (وجود کاربر از قبل) اعتبارسنجیهای خود Yii وجود داره. مثال:
public function rules()
{
    return array(
        // ...
        array('username', 'unique'),
    );
}
ولی اگه بخواین کلاً خطایی رو به یکی از فیلدهای مدل اختصاص بدین، میتونید این شکلی کار کنید:
$model->addError('username', 'این کاربر قبلاً ثبت نام کرده است.');
اینطوری، چون مدل شما خطا داره، دیگه ثبت نام نمیشه. البته از اونجا که موقع استفاده از متد save روی مدل، دوباره validation اعمال میشه و خطای تولیدشده شما بصورت دستی حذف میشه، ذخیره کردن مدل رو بجای این حالت:
if($model->save()) { ... }
باید این شکلی کنید:
if(!$model->hasErrors() && $model->save()) { ... }
پاسخ
تشکر شده توسط: meysam1366
#3
استاد من توی tools اومدم یه تابع نوشتم که یه وردی بهش میدم و خطامو ترجمه میکنه.
بعد اومدم تو کنترلرم اینجوری نوشت
$this->redirect(array('doreregister/create','id'=>$user->id,'msg'=>20));
و ارور دلخواهمو با متد گت میفرستم به ویو و اونجا ترجمش میکنم.
اما یه مشکلی وجود داره که وقتی ریدایرکت میشه کل محتوای فرمم پام میشه و کار مجددا باید اطلاعاتشو وارد کنه.
برای حل این مشکل چیکار کنم؟
***
راستی ادیتور پیاخ سری هم یه تکت اریا سادست تو انجمن
پاسخ
تشکر شده توسط:
#4
از لینک پاسخ جدید استفاده کنید تا ادیتور رو داشته باشین. روشی که برای نمایش خطا انتخاب کردین درست نیست. بهتره از Flash Message ها استفاده کنید.
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 3 مهمان