如何在yii2中应用更新规则

如何在yii2中应用更新规则,yii,yii2,updates,rules,Yii,Yii2,Updates,Rules,我是yii2新手,不知道如何将相同的插入规则应用到更新中。这是我的插入规则,我希望所有规则也能在更新时生效 public $tag; public function rules() { return [ [['user_id', 'name', 'address', 'state'], 'required'], [['user_id'], 'integer'], [['tag'], 'safe'], [['n

我是yii2新手,不知道如何将相同的插入规则应用到更新中。这是我的插入规则,我希望所有规则也能在更新时生效

    public $tag;
    public function rules()
{
    return [
        [['user_id', 'name', 'address', 'state'], 'required'],
        [['user_id'], 'integer'],
        [['tag'], 'safe'],
        [['name'], 'string', 'max' => 30],
        [['address'], 'string', 'max' => 250],
        [['state'], 'string', 'max' => 255],
    ];
}

在我的代码中添加“on”=>“update”无效。对不起我的英语。谢谢。

默认规则应用于创建和更新中,如果希望在更新和创建之间有不同的行为,则只需创建新规则

要应用这些规则,只需创建一个
$model->validate()
来检查规则,请参阅yii2文档的这个示例

$model->load(\Yii::$app->request->post());

if ($model->validate()) {
    // all inputs are valid
} else {
    // validation failed: $errors is an array containing error messages
    $errors = $model->errors;
}

默认规则应用于创建和更新中,如果希望更新和创建之间的行为不同,则只需创建新规则

要应用这些规则,只需创建一个
$model->validate()
来检查规则,请参阅yii2文档的这个示例

$model->load(\Yii::$app->request->post());

if ($model->validate()) {
    // all inputs are valid
} else {
    // validation failed: $errors is an array containing error messages
    $errors = $model->errors;
}

您可以像这样向yii模型添加验证规则

public function rules(){
        return [
        [['boolean_var'],'boolean'],
            [[ 'range_in_string'],'required'],
            [['default_value'],'default','value'=>'DEFAULT VALUE'],
            [['integer_var'],'integer'],
            [['double_var'],'double'],
            [['number_min'],'number','min'=>10],
            [['number_max'],'number','max'=>100],
            [['number_min_max'],'number','min'=>10,'max'=>100],
            [['file_image'],'image'],
            [['file_var'],'file','types'=>['gif','jpg']],
            [['date_var'],'date', 'format'=>'d-m-yy'],

            [['min_string'],'string','min'=>10],
            [['max_string'],'string','max'=>10],
            [['min_max_string'],'string','min'=>5,'max'=>10],
            ['min_max_string2', 'string', 'length' => [4, 10]],

            ['email_var','email'],
            ['url_var','url'],

            [['unique_var'],'unique'],

            [['filter_trim'],'filter','filter'=>'trim'],
            [['filter_trim'],'filter','filter'=>'strtolower'],
            ['filter_custom_function', 'filter', 'filter' => function ($value) {
            // your concept
            if($value=='')
            return '';
            return 'Value Changed';}],

            ['range_in_min_max', 'in','range'=>range(5,20)],

            ['range_in','in','range'=>['en','fr','zn'],'strict'=>false], //strict false
            ['range_in_string','in','range'=>['EN','FR','ZN'],'strict'=>true],

            ['custom_validation','custom_function_validation'],

            [['passwordConfirm'], 'compare', 'compareAttribute' => 'password'],     
            [['password','date_var'],'safe'],
        ];
}
如果只需要在更新而不创建时触发,可以添加如下场景

public function rules()
{
    return [
        // username, email and password are all required in "update" scenario
        [['username', 'email', 'password'], 'required', 'on' => 'update'],

        // username and password are required in "login" scenario
        [['username', 'password'], 'required', 'on' => 'login'],
    ];
}
在调用validate之前的操作中添加场景

//场景设置为属性

$model = new User;
$model->scenario = 'update';

您可以像这样向yii模型添加验证规则

public function rules(){
        return [
        [['boolean_var'],'boolean'],
            [[ 'range_in_string'],'required'],
            [['default_value'],'default','value'=>'DEFAULT VALUE'],
            [['integer_var'],'integer'],
            [['double_var'],'double'],
            [['number_min'],'number','min'=>10],
            [['number_max'],'number','max'=>100],
            [['number_min_max'],'number','min'=>10,'max'=>100],
            [['file_image'],'image'],
            [['file_var'],'file','types'=>['gif','jpg']],
            [['date_var'],'date', 'format'=>'d-m-yy'],

            [['min_string'],'string','min'=>10],
            [['max_string'],'string','max'=>10],
            [['min_max_string'],'string','min'=>5,'max'=>10],
            ['min_max_string2', 'string', 'length' => [4, 10]],

            ['email_var','email'],
            ['url_var','url'],

            [['unique_var'],'unique'],

            [['filter_trim'],'filter','filter'=>'trim'],
            [['filter_trim'],'filter','filter'=>'strtolower'],
            ['filter_custom_function', 'filter', 'filter' => function ($value) {
            // your concept
            if($value=='')
            return '';
            return 'Value Changed';}],

            ['range_in_min_max', 'in','range'=>range(5,20)],

            ['range_in','in','range'=>['en','fr','zn'],'strict'=>false], //strict false
            ['range_in_string','in','range'=>['EN','FR','ZN'],'strict'=>true],

            ['custom_validation','custom_function_validation'],

            [['passwordConfirm'], 'compare', 'compareAttribute' => 'password'],     
            [['password','date_var'],'safe'],
        ];
}
如果只需要在更新而不创建时触发,可以添加如下场景

public function rules()
{
    return [
        // username, email and password are all required in "update" scenario
        [['username', 'email', 'password'], 'required', 'on' => 'update'],

        // username and password are required in "login" scenario
        [['username', 'password'], 'required', 'on' => 'login'],
    ];
}
在调用validate之前的操作中添加场景

//场景设置为属性

$model = new User;
$model->scenario = 'update';

如果所有操作的规则都相同。。更新不需要特定的声明。。只有当insert和update之间的规则不同时,您才必须进行配置。您所说的规则是什么?例如,所需的规则?这些规则将应用于更新和insert,直到您指定一些仅用于更新的规则,可能您在问其他问题。我对yii2是新手,并且我已经阅读了文档。但是默认情况下,我的规则在更新中不起作用。如果所有操作的规则都相同。。更新不需要特定的声明。。只有当insert和update之间的规则不同时,您才必须进行配置。您所说的规则是什么?例如,所需的规则?这些规则将应用于更新和insert,直到您指定一些仅用于更新的规则,可能您在问其他问题。我对yii2是新手,并且我已经阅读了文档。但默认情况下,我的规则在更新中不起作用。