2017-04-21 16:40:27 2088次浏览 5条回答 0 悬赏 10 金钱

我想问下,验证规则,能不能做到post的数据中,如果type=1 ,start_time,end_time 这两个参数必填,如果type=2,start_time必填?

  • 回答于 2017-04-21 17:13 举报

    可以的兄弟。

    public function rules()
        {
            return [
                ['start_time','checkType'],// 检测
                ['end_time','checkType'],// 检测
            ];
        }
    
    public function checkType($attribute, $params)
        {
            if (!$this->hasErrors()) {
                $id = Yii::$app->request->get('id');
                if($this->type == 1){
                    if(empty($this->start_time)){
                        // 判断两个是否为空,如果为空,就添加错误
                        $this->addError($attribute, '字段不能为空');
                    }
                }else if($this->type == 2){
                    判断
                }
            }
        }
    

    我强烈建议不要这样搞,可以自己写一个dosave方法,然后判断id ,如果没有get到id说明是创建,如果get到了说明是更新。

  • 回答于 2017-04-21 18:01 举报

    在models 里面可以重写scenarios 方法

    %CA`U{OFWSRP0X8P1@F8(2N.png

    再添加的时候调用$model->setScenario('add_type_1')或者设置方式 来区分

    觉得很赞
  • 回答于 2017-04-21 20:53 举报

    试试 Conditional Validation:

    public function rules()
    {
        return [
            ['start_time', 'required', 'when' => function($model) {
                return in_array($model->type, [1, 2]);
            }],
            ['end_time', 'required', 'when' => function($model) {
                return $model->type == 1;
            }],
        ];
    }
    
    觉得很赞
  • 回答于 2017-04-24 11:55 举报

    楼上 正解!

  • 回答于 2017-04-24 13:52 举报

    rules, beforeSave里都可以验证。

您需要登录后才可以回答。登录 | 立即注册
xiaoguo0426
实习生

xiaoguo0426

注册时间:2016-12-20
最后登录:2017-04-24
在线时长:0小时45分
  • 粉丝0
  • 金钱5
  • 威望0
  • 积分5

热门问题