加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Yii2规则仅适用于场景

发布时间:2020-12-13 21:33:20 所属栏目:PHP教程 来源:网络整理
导读:我在Yii2评论模型中写了两个场景,当用户登录或是访客时. 我的规则是: public function rules() { return [ [['user_id'],'required','on' = self::SCENARIO_USER],[['name','email'],'on' = self::SCENARIO_GUEST],[['post_id','body','date'],'required'],
我在Yii2评论模型中写了两个场景,当用户登录或是访客时.

我的规则是:

public function rules()
    {
        return [
            [['user_id'],'required','on' => self::SCENARIO_USER],[['name','email'],'on' => self::SCENARIO_GUEST],[['post_id','body','date'],'required'],[['user_id','parent_id','post_id','status'],'integer'],[['body'],'string'],[['date'],'safe'],'email','site'],'string','max' => 256],];
    }

和senarios功能:

public function scenarios()
{
    $scenarios = parent::scenarios();
    $scenarios[self::SCENARIO_GUEST] = ['name','email'];
    $scenarios[self::SCENARIO_USER] = ['user_id'];
    return $scenarios;
}

我用它如下:

$commentModel = Yii::$app->user->isGuest ? new Comment(['scenario' => Comment::SCENARIO_GUEST]) : new Comment(['scenario' => Comment::SCENARIO_USER]);

如果客人查看表单,只检查姓名和电子邮件以及用户填写表单,则不检查任何字段!
为什么其他规则不检查?怎么解决?

解决方法

参见 Yii2 Scenarios

scenario()方法返回一个数组,其键是方案名称,并且值为相应的活动属性.可以大规模分配活动属性并进行验证.

public function scenarios()
{
     $scenarios = parent::scenarios();
     $scenarios[self::SCENARIO_GUEST] = ['name','date','site','post_id'];
     $scenarios[self::SCENARIO_USER] = ['user_id','post_id'];
     return $scenarios;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读