Home >Backend Development >PHP Tutorial >YII2 启用场景之后,影响了某些验证规则怎么办?

YII2 启用场景之后,影响了某些验证规则怎么办?

WBOY
WBOYOriginal
2016-06-06 20:40:411187browse

环境为YII2正式版
情景再现

用户表有一个字段create_time,我在rules里面设置了如下规则

<code>[['create_time'],'default','value'=>time(),'on'=>['sign']]
</code>

然后我添加用户的时候注册时间就无法默认了.把场景相关的删掉就行了,这个怎么破?

以下是要修改和删除的代码

<code>[['create_time'],'default','value'=>time(),'on'=>['sign']]
改为
[['create_time'],'default','value'=>time()]
</code>

User模型的

<code>public function scenarios(){
    return [
        'sign'=>['create_time']
    ]
}
</code>

SignFrom模型的

<code>$user = new user();
$user->setScenario('sign');//这行删除
</code>

然后就恢复正常

回复内容:

环境为YII2正式版
情景再现

用户表有一个字段create_time,我在rules里面设置了如下规则

<code>[['create_time'],'default','value'=>time(),'on'=>['sign']]
</code>

然后我添加用户的时候注册时间就无法默认了.把场景相关的删掉就行了,这个怎么破?

以下是要修改和删除的代码

<code>[['create_time'],'default','value'=>time(),'on'=>['sign']]
改为
[['create_time'],'default','value'=>time()]
</code>

User模型的

<code>public function scenarios(){
    return [
        'sign'=>['create_time']
    ]
}
</code>

SignFrom模型的

<code>$user = new user();
$user->setScenario('sign');//这行删除
</code>

然后就恢复正常

如果仅仅只是为了注册的时候自动填充create_time 这个必须推荐使用模型的 behaviors

<code><?php use yii\behaviors\TimestampBehavior; //1首先引入timestamp行为类
use yii\db\ActiveRecord;
class Model extends ActiveRecord
{
    //2调用行为
    public function behaviors()
    {
        return [
            'timestamp' => [
                'class'      => TimestampBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['create_time'],
                ],
            ],
        ];
    }
    ...
}
</code>

如果是为了解决场景带来的困扰那么在不是sign的时候不要 设置场景就好了
科普一下场景 scenario 场景是为了区分模型在不同使用情况下做不同的验证区分 假设 rules 有指定 on => 'sign' 说明这条验证规则只在 scenario的情况下 validate生效 所以请不要一实例模型就给设置场景

我也遇到了同样的问题, 目前还没有深入去看框架的代码;
暂时用 ActiveRecord.beforeSave 替换了 rules.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn