yii如何显示验证失败的自定义错误消息msg

时间:2012-07-31 03:59:24

标签: php yii

我想用规则验证失败错误消息显示我的自定义错误消息。我该怎么办?

这个来自控制器的消息

$expire_date_error = '<p>Please enter the company license expire date more than notification days</p>
                    <ul>
                    <li>Expire Date is less than notificaion days on current date.</li>
                    </ul>';
                Yii::app()->user->setFlash('expire_date_error',$expire_date_error); 

        $this->render('create',array(
            'model'=>$model,

这从视图中获取消息。

<?php if(Yii::app()->user->hasFlash('expire_date_error')):?>
        <div class="errorMessage">
            <?php echo Yii::app()->user->getFlash('expire_date_error'); ?>
        </div>
    <?php endif; ?>

我使用了http://www.yiiframework.com/wiki/21/how-to-work-with-flash-messages/

中的一些代码

问候 ======================= +++++++++++++++++++++++++++ ++++++ ==========================

更新问题。

这是我的控制器

public function actionCreate()
    {
        $model=new CompanyLicense;

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if(isset($_POST['CompanyLicense']))
        {
            $currentTime = date('Y-m-d h:i:s', time());     

            $model->attributes= $_POST['CompanyLicense'];
            $model->created = $currentTime; 
            $model->active = 1; 

            $model->expire_date= $_POST['CompanyLicense']['expire_date'];

            if($model->checkExpireDate())
            {
                $model->file_name=CUploadedFile::getInstance($model,'file_name');
                $folder = Yii::getPathOfAlias('webroot').'/images/';
                if($model->save())
                {
                    mkdir($folder.$model->id);
                    $model->file_name->saveAs($folder. $model->id . "/" . $model->file_name);
                    $this->redirect(array('view','id'=>$model->id));
                }
            }else{
                //echo 'debug';
                $expire_date_error = '<p>Please enter the company license expire date more than notification days</p>
                    <ul>
                    <li>Expire Date is less than notificaion days on current date.</li>
                    </ul>';
                Yii::app()->user->setFlash('expire_date_error',$expire_date_error); 
            }
        }

        $this->render('create',array(
            'model'=>$model,
        ));
    }
public function checkExpireDate($attribute='',$params ='')
    {
        $currentTime = date('Y-m-d', time());
        $currentTime = date('Y-m-d', strtotime($currentTime . '+ ' . $this->notification_days.' days'));
        if ($currentTime > $this->expire_date) 
            return false;

        return true;
            //$this->addError($this->expire_date,'should be more ' . $this->notification_days . ' days on current date!');
    }

我想用其他验证失败错误消息显示此错误。

2 个答案:

答案 0 :(得分:0)

请阅读本文

http://www.yiiframework.com/wiki/1/how-to-customize-the-error-message-of-a-validation-rule/

或尝试

class Post extends CActiveRecord
{
    public function rules()
    {
        return array(
            array('title, content', 'required',
                  'message'=>'Please enter a value for {attribute}.'),
            // ... other rules
        );
    }
}

在上面,自定义错误消息包含预定义的占位符{attribute}。 CRequiredValidator(其别名是必需的)将使用未通过验证的实际属性名称替换此占位符。

答案 1 :(得分:0)

如果您使用自定义验证功能,则:

 class Post extends CActiveRecord
 {
     public function rules()
     {
         return array(
             array('expire_date_error', 'check'),
         );
     }

     public function check()
     {
         if($this->a > $this->b) {
             $this->addError('expire_date_error', 'New custom error message');
             return false;
         }

         return true;
     }
 }