【问题标题】:Condtitional Validation rules in YiiYii 中的条件验证规则
【发布时间】:2015-09-09 14:23:11
【问题描述】:

我在 Yii 中的自定义验证规则有问题。我有一些字段,如day1s、day1e、day2s、day2e 等。我想在创建新记录之前检查这些属性是否在我的数据库中存储了相同的值。并检查不同的用户标识。如果一个值已经存在,我想生成一个错误并提示用户更改该值。我想这样做:

 array('day1s, day1e, day2s etc','unique','message'=>'day1s is already exist, please change'),

这有点工作,但我想修改它。它的默认值是"00:00",如果我设置这个规则,那么每次我都会去创建一个新记录,它会生成错误,除了第一次。我想在day1s==00:00 时忽略它。而且,如果用户发生变化(在我的情况下,用户是 SchoolID)。我很难弄清楚如何做到这一点。提前致谢!

【问题讨论】:

  • 所以你想检查day1s 是否是唯一的并且..?还有什么?

标签: php yii yii-validation


【解决方案1】:

在规则中添加allowEmpty:

array('day1s, day1e, day2s etc','unique','message'=>'day1s is already exist, please change', 'allowEmpty'=>true),

在验证前的控制器中添加以下代码:

if($model->day1s == "00:00") {
   $model->day1s = '';
} 

【讨论】:

    【解决方案2】:

    很抱歉这么晚才回答。在控制器中,您的意思是在我的操作中创建?在$model->save 之前?我尝试过,但它似乎不起作用。我想在我的模型中创建一个这样的函数:

    public function unique() {       
     if ($this->day1s == "00:00" || $this->day1s == "0:00") {
    
           $this->day1s='';//here it seems to work for the 00:00
     } else {
         //but my rule gets ignored now for any other values. What can I add here to make it work?
     }
    

    也很抱歉发布答案而不是编辑我的问题。

    我终于明白了:我的规则是这样的:

    array('day1s,day1e, day2s, day2e, day3s, day3e, day4s, day4e, day5s, day5e, day6s, day6e, day7s, day7e','unique','message'=>'This already exist, please change', 'allowEmpty'=>true,
                     'criteria' => array(
                     'condition' => 'schoolid=:schoolid',
                     'params' => array(':schoolid' => $this->schoolid))
                   ),
    

    我的控制器是这样的:

    if ($model->day1s == "00:00" || $model->day1s == "0:00") {
        $model->day1s='';//for custom validation rule 'unique'
                        } 
    if ($model->day1e == "00:00" || $model->day1e == "0:00") {
                                $model->day1e='';
                        }
     .....
     if($model->validate()){
            if($model->save())
                        $this->redirect('admin');}
        }  
    

    再次感谢您的帮助!

    【讨论】:

    • 是的,看起来不错!我没有彻底测试它,但它似乎是合法的!非常感谢!
    • 我刚刚检查过了。在更新中它工作正常,但是当我创建一个新的时,它似乎忽略了规则。我觉得很奇怪。我在 actionUpdate 和 actionCreate 上都使用了相同的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多