具有yii条件的自定义验证

时间:2014-01-13 00:46:23

标签: yii

对于noob问题感到抱歉,但我不明白为什么它没有返回我期待的东西。基本上,它只是想查看用户的开始和结束是否在每个id存在的日期之间,不是吗?

public function date_range($attribute, $params)
{
    $model= Table::model();
    $criteria = new CDbCriteria;

    $criteria->compare('id',$this->id);
    $criteria->addCondition('start_date < '.$this->start_date);
    $criteria->addCondition('end_date > '.$this->end_date);

    $record = $model->findAll($criteria);

    if($record==true)
    $this->addError('id', 'Item already exists within range.');

}

1 个答案:

答案 0 :(得分:0)

您可以将此功能的内容放在beforeValidate()等更好的位置,然后返回错误。

public function beforeValidate()
{

    $criteria = new CDbCriteria;

    $criteria->compare('id',$this->id);
    $criteria->addCondition('start_date < '.$this->start_date);
    $criteria->addCondition('end_date > '.$this->end_date);

    $record = Table::model()->exist($criteria); // I checked for existance

    if(!empty($record)) // if there are records
    {
         $this->addError('id', 'Item already exists within range.');
         return false;
     }
    return parent::beforeValidate();//don't forget this line
}